diff --git a/18-depth-testing/.gitignore b/18-depth-testing/.gitignore new file mode 100644 index 0000000..7999676 --- /dev/null +++ b/18-depth-testing/.gitignore @@ -0,0 +1,10 @@ +.*.sw* +.DS_Store +*.sqlite3 +*.sqlite3-wal +*.sqlite3-shm +debug +coverage/ +.coverage +builddir +subprojects diff --git a/18-depth-testing/.vimrc_proj b/18-depth-testing/.vimrc_proj new file mode 100644 index 0000000..2b745b4 --- /dev/null +++ b/18-depth-testing/.vimrc_proj @@ -0,0 +1 @@ +set makeprg=meson\ compile\ -C\ . diff --git a/18-depth-testing/LICENSE b/18-depth-testing/LICENSE new file mode 100644 index 0000000..a4e9dc9 --- /dev/null +++ b/18-depth-testing/LICENSE @@ -0,0 +1,16 @@ +MIT No Attribution + +Copyright + +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. + +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. diff --git a/18-depth-testing/Makefile b/18-depth-testing/Makefile new file mode 100644 index 0000000..d9c78d6 --- /dev/null +++ b/18-depth-testing/Makefile @@ -0,0 +1,30 @@ +all: build + +reset: + powershell -executionpolicy bypass .\scripts\reset_build.ps1 + +build: + meson compile -j 4 -C builddir + +release_build: + meson --wipe builddir -Db_ndebug=true --buildtype release + meson compile -j 4 -C builddir + +debug_build: + meson setup --wipe builddir -Db_ndebug=true --buildtype debugoptimized + meson compile -j 4 -C builddir + +run: test + ./builddir/hellogl.exe + +test: build + ./builddir/fuc2it + +debug_test: build + gdb --nx -x .gdbinit --ex run --args builddir/fuc2it.exe + +debug_run: build + gdb --nx -x .gdbinit --batch --ex run --ex bt --ex q --args builddir/hellogl.exe + +clean: + meson compile --clean -C builddir diff --git a/18-depth-testing/assets/container2.png b/18-depth-testing/assets/container2.png new file mode 100644 index 0000000..596e8da Binary files /dev/null and b/18-depth-testing/assets/container2.png differ diff --git a/18-depth-testing/assets/crate.bbmodel b/18-depth-testing/assets/crate.bbmodel new file mode 100644 index 0000000..96476d1 --- /dev/null +++ b/18-depth-testing/assets/crate.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"5.0","model_format":"free","box_uv":false},"name":"crate","model_identifier":"","visible_box":[1,1,0],"variable_placeholders":"","multi_file_ruleset":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":500,"height":500},"elements":[{"name":"cube","box_uv":false,"render_order":"default","locked":false,"export":true,"scope":0,"allow_mirror_modeling":true,"from":[0,0,3],"to":[3,3,6],"autouv":0,"color":0,"origin":[0,0,0],"faces":{"north":{"uv":[0,0,500,500],"texture":0},"east":{"uv":[0,0,500,500],"texture":0},"south":{"uv":[0,0,500,500],"texture":0},"west":{"uv":[0,0,500,500],"texture":0},"up":{"uv":[0,0,500,500],"texture":0},"down":{"uv":[0,0,500,500],"texture":0}},"type":"cube","uuid":"ec872ed4-c658-e84b-8017-24009a9c0521"}],"groups":[],"outliner":["ec872ed4-c658-e84b-8017-24009a9c0521"],"textures":[{"name":"container2.png","relative_path":"../resources/textures/container2.png","folder":"","namespace":"","id":"0","group":"","scope":0,"width":500,"height":500,"uv_width":500,"uv_height":500,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","file_format":"png","render_mode":"default","render_sides":"auto","wrap_mode":"limited","pbr_channel":"color","fps":7,"frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"cd2bce81-4f84-6efd-a971-2b9e91f19e2f","source":"data:image/png;base64,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"}],"export_options":{"gltf":{"encoding":"binary","scale":16,"embed_textures":true,"armature":false,"animations":false}}} \ No newline at end of file diff --git a/18-depth-testing/assets/crate.glb b/18-depth-testing/assets/crate.glb new file mode 100644 index 0000000..88f5b7b Binary files /dev/null and b/18-depth-testing/assets/crate.glb differ diff --git a/18-depth-testing/assets/crate.mtl b/18-depth-testing/assets/crate.mtl new file mode 100644 index 0000000..53afeb4 --- /dev/null +++ b/18-depth-testing/assets/crate.mtl @@ -0,0 +1,4 @@ +# Made in Blockbench 5.1.6 +newmtl m_cd2bce81-4f84-6efd-a971-2b9e91f19e2f +map_Kd container2.png +newmtl none \ No newline at end of file diff --git a/18-depth-testing/assets/crate.obj b/18-depth-testing/assets/crate.obj new file mode 100644 index 0000000..94a569c --- /dev/null +++ b/18-depth-testing/assets/crate.obj @@ -0,0 +1,49 @@ +# Made in Blockbench 5.1.6 +mtllib crate.mtl + +o cube +v 0.1875 0.4375 0.375 +v 0.1875 0.4375 -0.0625 +v 0.1875 0 0.375 +v 0.1875 0 -0.0625 +v -0.25 0.4375 -0.0625 +v -0.25 0.4375 0.375 +v -0.25 0 -0.0625 +v -0.25 0 0.375 +vt 0 1 +vt 1 1 +vt 1 0 +vt 0 0 +vt 0 1 +vt 1 1 +vt 1 0 +vt 0 0 +vt 0 1 +vt 1 1 +vt 1 0 +vt 0 0 +vt 0 1 +vt 1 1 +vt 1 0 +vt 0 0 +vt 0 1 +vt 1 1 +vt 1 0 +vt 0 0 +vt 0 1 +vt 1 1 +vt 1 0 +vt 0 0 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl m_cd2bce81-4f84-6efd-a971-2b9e91f19e2f +f 4/4/1 7/3/1 5/2/1 2/1/1 +f 3/8/2 4/7/2 2/6/2 1/5/2 +f 8/12/3 3/11/3 1/10/3 6/9/3 +f 7/16/4 8/15/4 6/14/4 5/13/4 +f 6/20/5 1/19/5 2/18/5 5/17/5 +f 7/24/6 4/23/6 3/22/6 8/21/6 \ No newline at end of file diff --git a/18-depth-testing/assets/popcorn_model_a.glb b/18-depth-testing/assets/popcorn_model_a.glb new file mode 100644 index 0000000..6cecf0e Binary files /dev/null and b/18-depth-testing/assets/popcorn_model_a.glb differ diff --git a/18-depth-testing/config.json b/18-depth-testing/config.json new file mode 100644 index 0000000..ccc3148 --- /dev/null +++ b/18-depth-testing/config.json @@ -0,0 +1,99 @@ +{ + "scene": { + "shader": { + "vertex_path": "shaders/17-vert.glsl", + "frag_path": "shaders/17-frag.glsl" + }, + "light_shader": { + "vertex_path": "shaders/17-vert.glsl", + "frag_path": "shaders/17-lightsource.frag.glsl" + }, + "materials": { + "crate": { + "ambient": [0.5, 0.5, 0.5], + "shininess": 32.0, + "diffuseMap": 0, + "specularMap": 0 + }, + "popcorn": { + "ambient": [0.5, 0.25, 0.31], + "shininess": 10000.0, + "diffuseMap": 0, + "specularMap": 0 + } + }, + "models": { + "crate": { + "directory": "assets", + "model_path": "crate.obj" + }, + "popcorn": { + "directory": "assets", + "model_path": "popcorn_model_a.glb" + } + }, + "things": [ + {"model": "crate", "position": [0.0, 0.0, 0.0], "material": "crate"}, + {"model": "crate", "position": [2.0, 5.0, -15.0], "material": "crate"}, + {"model": "crate", "position": [-1.5, -2.2, -2.5], "material": "crate"}, + {"model": "popcorn", "position": [-3.8, -2.0, -12.3], "material": "popcorn"}, + {"model": "crate", "position": [ 2.4, -0.4, -3.5], "material": "crate"}, + {"model": "crate", "position": [-1.7, 3.0, -7.5], "material": "crate"}, + {"model": "popcorn", "position": [ 1.3, -2.0, -2.5], "material": "popcorn"}, + {"model": "crate", "position": [ 1.5, 2.0, -2.5], "material": "crate"}, + {"model": "popcorn", "position": [ 1.5, 0.2, -1.5], "material": "popcorn"}, + {"model": "crate", "position": [-1.3, 1.0, -1.5], "material": "crate"} + ], + "camera": { + "position": [0.0, 0.0, 3.0], + "front": [0.0, 0.0, -1.0], + "up": [0.0, 1.0, 0.0], + "direction": [0.0, 0.0, 0.0], + "movement_speed": 10.0 + }, + "light": { + "directional": [ + { + "position": [0, 0, 0.0], + "direction":[-0.2, -1.0, -0.3], + "ambient":[0.2, 0.2, 0.2], + "diffuse":[0.8, 0.8, 0.8], + "specular":[1.0, 1.0, 1.0], + "constant": 0.0, + "linear": 0.0, + "quadratic": 0.0, + "cut_off": 0.0, + "outer_cut_off": 0.0 + } + ], + "positioned": [ + { + "position": [1.2, 1.0, 2.0], + "direction":[-0.2, -1.0, -0.3], + "ambient":[0.2, 0.2, 0.2], + "diffuse":[0.8, 0.8, 0.8], + "specular":[1.0, 1.0, 1.0], + "constant": 1.0, + "linear": 0.09, + "quadratic": 0.032, + "cut_off": 12.5, + "outer_cut_off": 17.5 + } + ], + "spot": [ + ], + "camera": { + "position":[2.2, 1.0, 2.0], + "direction":[0.0, 0.0, -1.0], + "ambient":[0.2, 0.2, 0.2], + "diffuse":[0.8, 0.8, 0.8], + "specular":[1.0, 1.0, 1.0], + "constant": 1.0, + "linear": 0.09, + "quadratic": 0.032, + "cut_off": 12.5, + "outer_cut_off": 17.5 + } + } + } +} diff --git a/18-depth-testing/meson.build b/18-depth-testing/meson.build new file mode 100644 index 0000000..6edf5a7 --- /dev/null +++ b/18-depth-testing/meson.build @@ -0,0 +1,101 @@ +project('hellogl', 'cpp', + version: '0.1.0', + default_options: [ + 'cpp_std=c++23', + 'cpp_args=-D_GLIBCXX_DEBUG=1 -D_GLIBCXX_DEBUG_PEDANTIC=1', + ]) + +# use this for common options only for our executables +cpp_args=[ + '-Wno-unused-parameter', + '-Wno-unused-function', + '-Wno-unused-variable', + '-Wno-unused-but-set-variable', + '-Wno-deprecated-declarations', +] +link_args=[] +# these are passed as override_defaults +exe_defaults = [ 'warning_level=2' ] + +cc = meson.get_compiler('cpp') +dependencies = [] + +if build_machine.system() == 'windows' + add_global_link_arguments( + '-static-libgcc', + '-static-libstdc++', + '-static', + '-lstdc++exp', + language: 'cpp', + ) + + opengl32 = cc.find_library('opengl32', required: true) + winmm = cc.find_library('winmm', required: true) + gdi32 = cc.find_library('gdi32', required: true) + + dependencies += [ + opengl32, winmm, gdi32 + ] + exe_defaults += ['werror=true'] + +elif build_machine.system() == 'darwin' + add_global_link_arguments( + language: 'cpp', + ) + + opengl = dependency('OpenGL') + corefoundation = dependency('CoreFoundation') + carbon = dependency('Carbon') + cocoa = dependency('Cocoa') + iokit = dependency('IOKit') + corevideo = dependency('CoreVideo') + + link_args += ['-ObjC'] + exe_defaults += ['werror=false'] + dependencies += [ + opengl, corefoundation, carbon, cocoa, iokit, corevideo + ] +endif + +glfw3 = subproject('glfw').get_variable('glfw_dep') +fuc2 = subproject('fuc2').get_variable('fuc2_dep') +fmt = subproject('fmt').get_variable('fmt_dep') +glm = subproject('glm').get_variable('glm_dep') +json = subproject('nlohmann_json').get_variable('nlohmann_json_dep') + +assimp = subproject('assimp').get_variable('assimp_dep') + +dependencies += [ + glfw3, fuc2, fmt, glm, assimp, json +] + +inc_dirs = ['src'] + +sources = [ + 'src/glad/glad.cpp', + 'src/dbc.cpp', + 'src/stb_image.cpp', + 'src/shader.cpp', + 'src/mesh.cpp', + 'src/utils.cpp', + 'src/model.cpp', + 'src/scene.cpp', + 'src/camera.cpp', +] + +subdir('tests') + +executable('fuc2it', sources + fuc2_tests, + cpp_args: cpp_args, + link_args: link_args, + include_directories: inc_dirs, + override_options: exe_defaults, + dependencies: dependencies + [fuc2]) + +executable('hellogl', + sources + [ 'src/main.cpp' ], + cpp_args: cpp_args, + include_directories: inc_dirs, + link_args: link_args, + override_options: exe_defaults, + dependencies: dependencies) diff --git a/18-depth-testing/resources/textures/awesomeface.png b/18-depth-testing/resources/textures/awesomeface.png new file mode 100644 index 0000000..9840caf Binary files /dev/null and b/18-depth-testing/resources/textures/awesomeface.png differ diff --git a/18-depth-testing/resources/textures/container.jpg b/18-depth-testing/resources/textures/container.jpg new file mode 100644 index 0000000..d07bee4 Binary files /dev/null and b/18-depth-testing/resources/textures/container.jpg differ diff --git a/18-depth-testing/resources/textures/container2.png b/18-depth-testing/resources/textures/container2.png new file mode 100644 index 0000000..596e8da Binary files /dev/null and b/18-depth-testing/resources/textures/container2.png differ diff --git a/18-depth-testing/resources/textures/container2_specular.png b/18-depth-testing/resources/textures/container2_specular.png new file mode 100644 index 0000000..681bf6e Binary files /dev/null and b/18-depth-testing/resources/textures/container2_specular.png differ diff --git a/18-depth-testing/resources/textures/popcorn.jpg b/18-depth-testing/resources/textures/popcorn.jpg new file mode 100644 index 0000000..9f82106 Binary files /dev/null and b/18-depth-testing/resources/textures/popcorn.jpg differ diff --git a/18-depth-testing/scripts/reset_build.ps1 b/18-depth-testing/scripts/reset_build.ps1 new file mode 100644 index 0000000..975852d --- /dev/null +++ b/18-depth-testing/scripts/reset_build.ps1 @@ -0,0 +1,7 @@ +mv .\subprojects\packagecache . +rm -recurse -force .\subprojects\,.\builddir\ +mkdir subprojects +mv .\packagecache .\subprojects\ +mkdir builddir +cp wraps\*.wrap subprojects\ +meson setup --default-library=static --prefer-static builddir diff --git a/18-depth-testing/scripts/reset_build.sh b/18-depth-testing/scripts/reset_build.sh new file mode 100644 index 0000000..89931e7 --- /dev/null +++ b/18-depth-testing/scripts/reset_build.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +mv -f ./subprojects/packagecache . +rm -rf subprojects builddir +mkdir subprojects +mv -f packagecache ./subprojects/ && true +mkdir builddir +cp wraps/*.wrap subprojects/ +# on OSX you can't do this with static +meson setup --default-library=static --prefer-static builddir diff --git a/18-depth-testing/scripts/setup.ps1 b/18-depth-testing/scripts/setup.ps1 new file mode 100644 index 0000000..050d716 --- /dev/null +++ b/18-depth-testing/scripts/setup.ps1 @@ -0,0 +1,4 @@ +mkdir builddir +mkdir subprojects +cp wraps/*.wrap subprojects +meson setup -Ddefault_library=static builddir diff --git a/18-depth-testing/scripts/setup.sh b/18-depth-testing/scripts/setup.sh new file mode 100644 index 0000000..7881736 --- /dev/null +++ b/18-depth-testing/scripts/setup.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -ex + +mkdir subprojects +mkdir builddir +cp wraps/*.wrap subprojects/ +meson setup builddir diff --git a/18-depth-testing/scripts/watch_build.sh b/18-depth-testing/scripts/watch_build.sh new file mode 100644 index 0000000..44a5516 --- /dev/null +++ b/18-depth-testing/scripts/watch_build.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -e + +fswatch -o *.cpp | while read num +do echo ">>>>>>>>>>>>>>>>>>>>>> `date`" + if meson compile -C builddir + then + ./builddir/sfmldemo + else + echo "^^^^^^^^^^^^^^^^^^^^^ ERROR `date`" + fi +done diff --git a/18-depth-testing/scripts/windows_setup.ps1 b/18-depth-testing/scripts/windows_setup.ps1 new file mode 100644 index 0000000..73ed4d1 --- /dev/null +++ b/18-depth-testing/scripts/windows_setup.ps1 @@ -0,0 +1,255 @@ +function Test-WinUtilPackageManager { + <# + + .SYNOPSIS + Checks if Winget and/or Choco are installed + + .PARAMETER winget + Check if Winget is installed + + .PARAMETER choco + Check if Chocolatey is installed + + #> + + Param( + [System.Management.Automation.SwitchParameter]$winget, + [System.Management.Automation.SwitchParameter]$choco + ) + + $status = "not-installed" + + if ($winget) { + # Check if Winget is available while getting it's Version if it's available + $wingetExists = $true + try { + $wingetVersionFull = winget --version + } catch [System.Management.Automation.CommandNotFoundException], [System.Management.Automation.ApplicationFailedException] { + Write-Warning "Winget was not found due to un-availablity reasons" + $wingetExists = $false + } catch { + Write-Warning "Winget was not found due to un-known reasons, The Stack Trace is:`n$($psitem.Exception.StackTrace)" + $wingetExists = $false + } + + # If Winget is available, Parse it's Version and give proper information to Terminal Output. + # If it isn't available, the return of this funtion will be "not-installed", indicating that + # Winget isn't installed/available on The System. + if ($wingetExists) { + # Check if Preview Version + if ($wingetVersionFull.Contains("-preview")) { + $wingetVersion = $wingetVersionFull.Trim("-preview") + $wingetPreview = $true + } else { + $wingetVersion = $wingetVersionFull + $wingetPreview = $false + } + + # Check if Winget's Version is too old. + $wingetCurrentVersion = [System.Version]::Parse($wingetVersion.Trim('v')) + # Grabs the latest release of Winget from the Github API for version check process. + $response = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/Winget-cli/releases/latest" -Method Get -ErrorAction Stop + $wingetLatestVersion = [System.Version]::Parse(($response.tag_name).Trim('v')) #Stores version number of latest release. + $wingetOutdated = $wingetCurrentVersion -lt $wingetLatestVersion + Write-Host "===========================================" -ForegroundColor Green + Write-Host "--- Winget is installed ---" -ForegroundColor Green + Write-Host "===========================================" -ForegroundColor Green + Write-Host "Version: $wingetVersionFull" -ForegroundColor White + + if (!$wingetPreview) { + Write-Host " - Winget is a release version." -ForegroundColor Green + } else { + Write-Host " - Winget is a preview version. Unexpected problems may occur." -ForegroundColor Yellow + } + + if (!$wingetOutdated) { + Write-Host " - Winget is Up to Date" -ForegroundColor Green + $status = "installed" + } + else { + Write-Host " - Winget is Out of Date" -ForegroundColor Red + $status = "outdated" + } + } else { + Write-Host "===========================================" -ForegroundColor Red + Write-Host "--- Winget is not installed ---" -ForegroundColor Red + Write-Host "===========================================" -ForegroundColor Red + $status = "not-installed" + } + } + + if ($choco) { + if ((Get-Command -Name choco -ErrorAction Ignore) -and ($chocoVersion = (Get-Item "$env:ChocolateyInstall\choco.exe" -ErrorAction Ignore).VersionInfo.ProductVersion)) { + Write-Host "===========================================" -ForegroundColor Green + Write-Host "--- Chocolatey is installed ---" -ForegroundColor Green + Write-Host "===========================================" -ForegroundColor Green + Write-Host "Version: v$chocoVersion" -ForegroundColor White + $status = "installed" + } else { + Write-Host "===========================================" -ForegroundColor Red + Write-Host "--- Chocolatey is not installed ---" -ForegroundColor Red + Write-Host "===========================================" -ForegroundColor Red + $status = "not-installed" + } + } + + return $status +} + +function Get-WinUtilWingetPrerequisites { + <# + .SYNOPSIS + Downloads the Winget Prereqs. + .DESCRIPTION + Downloads Prereqs for Winget. Version numbers are coded as variables and can be updated as uncommonly as Microsoft updates the prereqs. + #> + + # I don't know of a way to detect the prereqs automatically, so if someone has a better way of defining these, that would be great. + # Microsoft.VCLibs version rarely changes, but for future compatibility I made it a variable. + $versionVCLibs = "14.00" + $fileVCLibs = "https://aka.ms/Microsoft.VCLibs.x64.${versionVCLibs}.Desktop.appx" + # Write-Host "$fileVCLibs" + # Microsoft.UI.Xaml version changed recently, so I made the version numbers variables. + $versionUIXamlMinor = "2.8" + $versionUIXamlPatch = "2.8.6" + $fileUIXaml = "https://github.com/microsoft/microsoft-ui-xaml/releases/download/v${versionUIXamlPatch}/Microsoft.UI.Xaml.${versionUIXamlMinor}.x64.appx" + # Write-Host "$fileUIXaml" + + Try{ + Write-Host "Downloading Microsoft.VCLibs Dependency..." + Invoke-WebRequest -Uri $fileVCLibs -OutFile $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx + Write-Host "Downloading Microsoft.UI.Xaml Dependency...`n" + Invoke-WebRequest -Uri $fileUIXaml -OutFile $ENV:TEMP\Microsoft.UI.Xaml.x64.appx + } + Catch{ + throw [WingetFailedInstall]::new('Failed to install prerequsites') + } +} + +function Get-WinUtilWingetLatest { + <# + .SYNOPSIS + Uses GitHub API to check for the latest release of Winget. + .DESCRIPTION + This function grabs the latest version of Winget and returns the download path to Install-WinUtilWinget for installation. + #> + # Invoke-WebRequest is notoriously slow when the byte progress is displayed. The following lines disable the progress bar and reset them at the end of the function + $PreviousProgressPreference = $ProgressPreference + $ProgressPreference = "silentlyContinue" + Try{ + # Grabs the latest release of Winget from the Github API for the install process. + $response = Invoke-RestMethod -Uri "https://api.github.com/repos/microsoft/Winget-cli/releases/latest" -Method Get -ErrorAction Stop + $latestVersion = $response.tag_name #Stores version number of latest release. + $licenseWingetUrl = $response.assets.browser_download_url | Where-Object {$_ -like "*License1.xml"} #Index value for License file. + Write-Host "Latest Version:`t$($latestVersion)`n" + Write-Host "Downloading..." + $assetUrl = $response.assets.browser_download_url | Where-Object {$_ -like "*Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"} + Invoke-WebRequest -Uri $licenseWingetUrl -OutFile $ENV:TEMP\License1.xml + # The only pain is that the msixbundle for winget-cli is 246MB. In some situations this can take a bit, with slower connections. + Invoke-WebRequest -Uri $assetUrl -OutFile $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle + } + Catch{ + throw [WingetFailedInstall]::new('Failed to get latest Winget release and license') + } + $ProgressPreference = $PreviousProgressPreference +} + +function Install-WinUtilWinget { + <# + + .SYNOPSIS + Installs Winget if it is not already installed. + + .DESCRIPTION + This function will download the latest version of Winget and install it. If Winget is already installed, it will do nothing. + #> + $isWingetInstalled = Test-WinUtilPackageManager -winget + + Try { + if ($isWingetInstalled -eq "installed") { + Write-Host "`nWinget is already installed.`r" -ForegroundColor Green + return + } elseif ($isWingetInstalled -eq "outdated") { + Write-Host "`nWinget is Outdated. Continuing with install.`r" -ForegroundColor Yellow + } else { + Write-Host "`nWinget is not Installed. Continuing with install.`r" -ForegroundColor Red + } + + # Gets the computer's information + if ($null -eq $sync.ComputerInfo){ + $ComputerInfo = Get-ComputerInfo -ErrorAction Stop + } else { + $ComputerInfo = $sync.ComputerInfo + } + + if (($ComputerInfo.WindowsVersion) -lt "1809") { + # Checks if Windows Version is too old for Winget + Write-Host "Winget is not supported on this version of Windows (Pre-1809)" -ForegroundColor Red + return + } + + # Install Winget via GitHub method. + # Used part of my own script with some modification: ruxunderscore/windows-initialization + Write-Host "Downloading Winget Prerequsites`n" + Get-WinUtilWingetPrerequisites + Write-Host "Downloading Winget and License File`r" + Get-WinUtilWingetLatest + Write-Host "Installing Winget w/ Prerequsites`r" + Add-AppxProvisionedPackage -Online -PackagePath $ENV:TEMP\Microsoft.DesktopAppInstaller.msixbundle -DependencyPackagePath $ENV:TEMP\Microsoft.VCLibs.x64.Desktop.appx, $ENV:TEMP\Microsoft.UI.Xaml.x64.appx -LicensePath $ENV:TEMP\License1.xml + Write-Host "Manually adding Winget Sources, from Winget CDN." + Add-AppxPackage -Path https://cdn.winget.microsoft.com/cache/source.msix #Seems some installs of Winget don't add the repo source, this should makes sure that it's installed every time. + Write-Host "Winget Installed" -ForegroundColor Green + Write-Host "Enabling NuGet and Module..." + Install-PackageProvider -Name NuGet -Force + Install-Module -Name Microsoft.WinGet.Client -Force + # Winget only needs a refresh of the environment variables to be used. + Write-Output "Refreshing Environment Variables...`n" + $ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User") + } Catch { + Write-Host "Failure detected while installing via GitHub method. Continuing with Chocolatey method as fallback." -ForegroundColor Red + # In case install fails via GitHub method. + Try { + # Install Choco if not already present + Install-WinUtilChoco + Start-Process -Verb runas -FilePath powershell.exe -ArgumentList "choco install winget-cli" + Write-Host "Winget Installed" -ForegroundColor Green + Write-Output "Refreshing Environment Variables...`n" + $ENV:PATH = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "User") + } Catch { + throw [WingetFailedInstall]::new('Failed to install!') + } + } +} + + +$isAdmin = [System.Security.Principal.WindowsPrincipal]::new( + [System.Security.Principal.WindowsIdentity]::GetCurrent()). + IsInRole('Administrators') + +if(-not $isAdmin) { + $params = @{ + FilePath = 'powershell' # or pwsh if Core + Verb = 'RunAs' + ArgumentList = @( + '-ExecutionPolicy ByPass' + '-File "{0}"' -f $PSCommandPath + ) + } + + Start-Process -Wait @params + Write-Host "Admin stuff done..." +} else { + Write-Host "In Admin stuff..." + Install-WinUtilWinget + return +} + +Start-Process -NoNewWindow -Wait winget -ArgumentList 'install','chocolatey' +Start-Process -NoNewWindow -Wait winget -ArgumentList 'install','Git.Git' +Start-Process -NoNewWindow -Wait winget -ArgumentList 'install','Microsoft.WindowsTerminal' +Start-Process -NoNewWindow -Wait winget -ArgumentList 'install','Python.Python.3.12' +Start-Process -NoNewWindow -Wait winget -ArgumentList 'install','AntibodySoftware.WizFile' +Start-Process -NoNewWindow -Wait winget -ArgumentList 'install','Kitware.CMake' +Start-Process -NoNewWindow -Wait winget -ArgumentList 'install','Microsoft.VCRedist.2015+.x64' + +Start-Process -Verb RunAs -Wait powershell -argumentlist 'C:\ProgramData\chocolatey\bin\choco.exe','install','geany','geany-plugins','winlibs','conan','meson' diff --git a/18-depth-testing/shaders/08-frag.glsl b/18-depth-testing/shaders/08-frag.glsl new file mode 100644 index 0000000..5b3d816 --- /dev/null +++ b/18-depth-testing/shaders/08-frag.glsl @@ -0,0 +1,43 @@ +#version 330 core +struct Material { + vec3 ambient; + vec3 diffuse; + vec3 specular; + float shininess; +}; + +struct Light { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +uniform Light light; + +uniform Material material; +out vec4 FragColor; +in vec3 FragPos; +in vec3 Normal; + +uniform vec3 viewPos; + +void main() +{ + vec3 ambient = light.ambient * material.ambient; + + vec3 norm = normalize(Normal); + vec3 lightDir = normalize(light.position - FragPos); + float diff = max(dot(norm, lightDir), 0.0); + vec3 diffuse = light.diffuse * (diff * material.diffuse); + + vec3 viewDir = normalize(viewPos - FragPos); + vec3 reflectDir = reflect(-lightDir, norm); + + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + vec3 specular = light.specular * (material.specular * spec); + + vec3 result = ambient + diffuse + specular; + + FragColor = vec4(result, 1.0); +} diff --git a/18-depth-testing/shaders/08-lightsource.frag.glsl b/18-depth-testing/shaders/08-lightsource.frag.glsl new file mode 100644 index 0000000..c208aa1 --- /dev/null +++ b/18-depth-testing/shaders/08-lightsource.frag.glsl @@ -0,0 +1,16 @@ +#version 330 core +out vec4 FragColor; + +struct Light { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +uniform Light light; + +void main() +{ + FragColor = vec4(light.diffuse, 1.0); // set all 4 vector values to 1.0 +} diff --git a/18-depth-testing/shaders/08-vert.glsl b/18-depth-testing/shaders/08-vert.glsl new file mode 100644 index 0000000..eda4400 --- /dev/null +++ b/18-depth-testing/shaders/08-vert.glsl @@ -0,0 +1,17 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aNormal; + +out vec3 FragPos; +out vec3 Normal; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0f); + FragPos = vec3(model * vec4(aPos, 1.0)); + Normal = mat3(transpose(inverse(model))) * aNormal; +} diff --git a/18-depth-testing/shaders/11-frag.glsl b/18-depth-testing/shaders/11-frag.glsl new file mode 100644 index 0000000..767caab --- /dev/null +++ b/18-depth-testing/shaders/11-frag.glsl @@ -0,0 +1,46 @@ +#version 330 core +struct Material { + sampler2D diffuse; + sampler2D specular; + float shininess; +}; + +struct Light { + vec3 position; + vec3 diffuse; + vec3 specular; + vec3 ambient; +}; + +out vec4 FragColor; +in vec3 FragPos; +in vec3 Normal; +in vec2 TexCoords; + +uniform vec3 viewPos; +uniform Light light; +uniform Material material; + +void main() +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + + vec3 ambient = light.ambient * mat_tex; + + vec3 norm = normalize(Normal); + vec3 lightDir = normalize(light.position - FragPos); + float diff = max(dot(norm, lightDir), 0.0); + vec3 diffuse = light.diffuse * diff * mat_tex; + + vec3 viewDir = normalize(viewPos - FragPos); + vec3 reflectDir = reflect(-lightDir, norm); + + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + vec3 specular = light.specular * spec * spec_tex; + + vec3 result = ambient + diffuse + specular; + + FragColor = vec4(result, 1.0); +} diff --git a/18-depth-testing/shaders/11-lightsource.frag.glsl b/18-depth-testing/shaders/11-lightsource.frag.glsl new file mode 100644 index 0000000..c208aa1 --- /dev/null +++ b/18-depth-testing/shaders/11-lightsource.frag.glsl @@ -0,0 +1,16 @@ +#version 330 core +out vec4 FragColor; + +struct Light { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +uniform Light light; + +void main() +{ + FragColor = vec4(light.diffuse, 1.0); // set all 4 vector values to 1.0 +} diff --git a/18-depth-testing/shaders/11-vert.glsl b/18-depth-testing/shaders/11-vert.glsl new file mode 100644 index 0000000..276f393 --- /dev/null +++ b/18-depth-testing/shaders/11-vert.glsl @@ -0,0 +1,20 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aNormal; +layout (location = 2) in vec2 aTexCoords; + +out vec3 FragPos; +out vec3 Normal; +out vec2 TexCoords; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0f); + FragPos = vec3(model * vec4(aPos, 1.0)); + Normal = mat3(transpose(inverse(model))) * aNormal; + TexCoords = aTexCoords; +} diff --git a/18-depth-testing/shaders/12-frag.glsl b/18-depth-testing/shaders/12-frag.glsl new file mode 100644 index 0000000..3986b8e --- /dev/null +++ b/18-depth-testing/shaders/12-frag.glsl @@ -0,0 +1,67 @@ +#version 330 core +struct Material { + sampler2D diffuse; + sampler2D specular; + float shininess; +}; + +struct Light { + vec3 direction; + vec3 position; + vec3 diffuse; + vec3 specular; + vec3 ambient; + + float constant; + float linear; + float quadratic; + float cutOff; + float outerCutOff; +}; + +out vec4 FragColor; +in vec3 FragPos; +in vec3 Normal; +in vec2 TexCoords; + +uniform vec3 viewPos; +uniform Light light; +uniform Material material; + +void main() +{ + vec3 lightDir = normalize(light.position - FragPos); + + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 ambient = light.ambient * mat_tex; + + vec3 norm = normalize(Normal); + float diff = max(dot(norm, lightDir), 0.0); + vec3 diffuse = light.diffuse * diff * mat_tex; + + vec3 viewDir = normalize(viewPos - FragPos); + vec3 reflectDir = reflect(-lightDir, norm); + + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + vec3 specular = light.specular * spec * spec_tex; + + // splotlight + float theta = dot(lightDir, normalize(-light.direction)); + float epsilon = light.cutOff - light.outerCutOff; + float intensity = clamp((theta - light.outerCutOff) / epsilon, 0.0, 1.0); + diffuse *= intensity; + specular *= intensity; + + // determine attenuation based on light distance + float distance = length(light.position - FragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + vec3 result = ambient + diffuse + specular; + FragColor = vec4(result, 1.0); +} diff --git a/18-depth-testing/shaders/12-lightsource.frag.glsl b/18-depth-testing/shaders/12-lightsource.frag.glsl new file mode 100644 index 0000000..c208aa1 --- /dev/null +++ b/18-depth-testing/shaders/12-lightsource.frag.glsl @@ -0,0 +1,16 @@ +#version 330 core +out vec4 FragColor; + +struct Light { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +uniform Light light; + +void main() +{ + FragColor = vec4(light.diffuse, 1.0); // set all 4 vector values to 1.0 +} diff --git a/18-depth-testing/shaders/12-vert.glsl b/18-depth-testing/shaders/12-vert.glsl new file mode 100644 index 0000000..276f393 --- /dev/null +++ b/18-depth-testing/shaders/12-vert.glsl @@ -0,0 +1,20 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aNormal; +layout (location = 2) in vec2 aTexCoords; + +out vec3 FragPos; +out vec3 Normal; +out vec2 TexCoords; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0f); + FragPos = vec3(model * vec4(aPos, 1.0)); + Normal = mat3(transpose(inverse(model))) * aNormal; + TexCoords = aTexCoords; +} diff --git a/18-depth-testing/shaders/13-frag.glsl b/18-depth-testing/shaders/13-frag.glsl new file mode 100644 index 0000000..01f8c14 --- /dev/null +++ b/18-depth-testing/shaders/13-frag.glsl @@ -0,0 +1,150 @@ +#version 330 core +struct Material { + sampler2D diffuse; + sampler2D specular; + float shininess; +}; + +out vec4 FragColor; +in vec3 FragPos; +in vec3 Normal; +in vec2 TexCoords; + +uniform vec3 viewPos; +uniform Material material; + +struct DirLight { + vec3 direction; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +struct PointLight { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; + float constant; + float linear; + float quadratic; +}; + +struct SpotLight { + vec3 direction; + vec3 position; + vec3 diffuse; + vec3 specular; + vec3 ambient; + + float constant; + float linear; + float quadratic; + float cutOff; + float outerCutOff; +}; + + +#define NR_POINT_LIGHTS 4 +uniform int pointLightCount; +uniform PointLight pointLights[NR_POINT_LIGHTS]; +uniform DirLight dirLight; +uniform SpotLight spotLight; + +vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + + vec3 lightDir = normalize(-light.direction); + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + return ambient + diffuse + specular; +} + +vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 lightDir = normalize(light.position - fragPos); + + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + // attenuation + float distance = length(light.position - fragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + return ambient + diffuse + specular; +} + +vec3 CalcSpotLight(SpotLight light, vec3 normal, vec3 fragPos, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 lightDir = normalize(light.position - fragPos); + + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + // attenuation + float distance = length(light.position - fragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + float theta = dot(lightDir, normalize(-light.direction)); + float epsilon = light.cutOff - light.outerCutOff; + float intensity = clamp((theta - light.outerCutOff) / epsilon, 0.0, 1.0); + diffuse *= intensity; + specular *= intensity; + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + return ambient + diffuse + specular; +} + +void main() +{ + vec3 norm = normalize(Normal); + vec3 viewDir = normalize(viewPos - FragPos); + + vec3 result = CalcDirLight(dirLight, norm, viewDir); + + for(int i = 0; i < pointLightCount; i++) { + result += CalcPointLight(pointLights[i], norm, FragPos, viewDir); + } + + result += CalcSpotLight(spotLight, norm, FragPos, viewDir); + + FragColor = vec4(result, 1.0); +} diff --git a/18-depth-testing/shaders/13-lightsource.frag.glsl b/18-depth-testing/shaders/13-lightsource.frag.glsl new file mode 100644 index 0000000..30728b2 --- /dev/null +++ b/18-depth-testing/shaders/13-lightsource.frag.glsl @@ -0,0 +1,9 @@ +#version 330 core +out vec4 FragColor; + +uniform vec3 diffuse; + +void main() +{ + FragColor = vec4(diffuse, 1.0); // set all 4 vector values to 1.0 +} diff --git a/18-depth-testing/shaders/13-vert.glsl b/18-depth-testing/shaders/13-vert.glsl new file mode 100644 index 0000000..276f393 --- /dev/null +++ b/18-depth-testing/shaders/13-vert.glsl @@ -0,0 +1,20 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aNormal; +layout (location = 2) in vec2 aTexCoords; + +out vec3 FragPos; +out vec3 Normal; +out vec2 TexCoords; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0f); + FragPos = vec3(model * vec4(aPos, 1.0)); + Normal = mat3(transpose(inverse(model))) * aNormal; + TexCoords = aTexCoords; +} diff --git a/18-depth-testing/shaders/14-frag.glsl b/18-depth-testing/shaders/14-frag.glsl new file mode 100644 index 0000000..01f8c14 --- /dev/null +++ b/18-depth-testing/shaders/14-frag.glsl @@ -0,0 +1,150 @@ +#version 330 core +struct Material { + sampler2D diffuse; + sampler2D specular; + float shininess; +}; + +out vec4 FragColor; +in vec3 FragPos; +in vec3 Normal; +in vec2 TexCoords; + +uniform vec3 viewPos; +uniform Material material; + +struct DirLight { + vec3 direction; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +struct PointLight { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; + float constant; + float linear; + float quadratic; +}; + +struct SpotLight { + vec3 direction; + vec3 position; + vec3 diffuse; + vec3 specular; + vec3 ambient; + + float constant; + float linear; + float quadratic; + float cutOff; + float outerCutOff; +}; + + +#define NR_POINT_LIGHTS 4 +uniform int pointLightCount; +uniform PointLight pointLights[NR_POINT_LIGHTS]; +uniform DirLight dirLight; +uniform SpotLight spotLight; + +vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + + vec3 lightDir = normalize(-light.direction); + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + return ambient + diffuse + specular; +} + +vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 lightDir = normalize(light.position - fragPos); + + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + // attenuation + float distance = length(light.position - fragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + return ambient + diffuse + specular; +} + +vec3 CalcSpotLight(SpotLight light, vec3 normal, vec3 fragPos, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 lightDir = normalize(light.position - fragPos); + + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + // attenuation + float distance = length(light.position - fragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + float theta = dot(lightDir, normalize(-light.direction)); + float epsilon = light.cutOff - light.outerCutOff; + float intensity = clamp((theta - light.outerCutOff) / epsilon, 0.0, 1.0); + diffuse *= intensity; + specular *= intensity; + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + return ambient + diffuse + specular; +} + +void main() +{ + vec3 norm = normalize(Normal); + vec3 viewDir = normalize(viewPos - FragPos); + + vec3 result = CalcDirLight(dirLight, norm, viewDir); + + for(int i = 0; i < pointLightCount; i++) { + result += CalcPointLight(pointLights[i], norm, FragPos, viewDir); + } + + result += CalcSpotLight(spotLight, norm, FragPos, viewDir); + + FragColor = vec4(result, 1.0); +} diff --git a/18-depth-testing/shaders/14-lightsource.frag.glsl b/18-depth-testing/shaders/14-lightsource.frag.glsl new file mode 100644 index 0000000..30728b2 --- /dev/null +++ b/18-depth-testing/shaders/14-lightsource.frag.glsl @@ -0,0 +1,9 @@ +#version 330 core +out vec4 FragColor; + +uniform vec3 diffuse; + +void main() +{ + FragColor = vec4(diffuse, 1.0); // set all 4 vector values to 1.0 +} diff --git a/18-depth-testing/shaders/14-vert.glsl b/18-depth-testing/shaders/14-vert.glsl new file mode 100644 index 0000000..276f393 --- /dev/null +++ b/18-depth-testing/shaders/14-vert.glsl @@ -0,0 +1,20 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aNormal; +layout (location = 2) in vec2 aTexCoords; + +out vec3 FragPos; +out vec3 Normal; +out vec2 TexCoords; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0f); + FragPos = vec3(model * vec4(aPos, 1.0)); + Normal = mat3(transpose(inverse(model))) * aNormal; + TexCoords = aTexCoords; +} diff --git a/18-depth-testing/shaders/16-frag.glsl b/18-depth-testing/shaders/16-frag.glsl new file mode 100644 index 0000000..4ca5ff5 --- /dev/null +++ b/18-depth-testing/shaders/16-frag.glsl @@ -0,0 +1,162 @@ +#version 330 core +struct Material { + sampler2D diffuse; + sampler2D specular; + float shininess; +}; + +out vec4 FragColor; +in vec3 FragPos; +in vec3 Normal; +in vec2 TexCoords; + +uniform vec3 viewPos; +uniform Material material; + +struct DirLight { + vec3 direction; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +struct PointLight { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; + float constant; + float linear; + float quadratic; +}; + +struct SpotLight { + vec3 direction; + vec3 position; + vec3 diffuse; + vec3 specular; + vec3 ambient; + + float constant; + float linear; + float quadratic; + float cut_off; + float outer_cut_off; +}; + + +#define MAX_LIGHTS 4 +uniform int pointLightCount = 0; +uniform PointLight pointLights[MAX_LIGHTS]; + +uniform int dirLightCount = 0; +uniform DirLight dirLights[MAX_LIGHTS]; + +uniform int spotLightCount = 0; +uniform SpotLight spotLights[MAX_LIGHTS]; + +vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + + vec3 lightDir = normalize(-light.direction); + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + return ambient + diffuse + specular; +} + +vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 lightDir = normalize(light.position - fragPos); + + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + // attenuation + float distance = length(light.position - fragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + return ambient + diffuse + specular; +} + +vec3 CalcSpotLight(SpotLight light, vec3 normal, vec3 fragPos, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 lightDir = normalize(light.position - fragPos); + + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + // attenuation + float distance = length(light.position - fragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + float theta = dot(lightDir, normalize(-light.direction)); + float epsilon = light.cut_off - light.outer_cut_off; + float intensity = clamp((theta - light.outer_cut_off) / epsilon, 0.0, 1.0); + diffuse *= intensity; + specular *= intensity; + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + return ambient + diffuse + specular; +} + +void main() +{ + vec3 norm = normalize(Normal); + vec3 viewDir = normalize(viewPos - FragPos); + + // kick it off with the first dirlight + vec3 result = CalcDirLight(dirLights[0], norm, viewDir); + + // then augment with more (off by one) + for(int i = 1; i < dirLightCount; i++) { + result += CalcDirLight(dirLights[i], norm, viewDir); + } + + for(int i = 0; i < pointLightCount; i++) { + result += CalcPointLight(pointLights[i], norm, FragPos, viewDir); + } + + for(int i = 0; i < spotLightCount; i++) { + result += CalcSpotLight(spotLights[i], norm, FragPos, viewDir); + } + + FragColor = vec4(result, 1.0); +} diff --git a/18-depth-testing/shaders/16-lightsource.frag.glsl b/18-depth-testing/shaders/16-lightsource.frag.glsl new file mode 100644 index 0000000..30728b2 --- /dev/null +++ b/18-depth-testing/shaders/16-lightsource.frag.glsl @@ -0,0 +1,9 @@ +#version 330 core +out vec4 FragColor; + +uniform vec3 diffuse; + +void main() +{ + FragColor = vec4(diffuse, 1.0); // set all 4 vector values to 1.0 +} diff --git a/18-depth-testing/shaders/16-vert.glsl b/18-depth-testing/shaders/16-vert.glsl new file mode 100644 index 0000000..276f393 --- /dev/null +++ b/18-depth-testing/shaders/16-vert.glsl @@ -0,0 +1,20 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aNormal; +layout (location = 2) in vec2 aTexCoords; + +out vec3 FragPos; +out vec3 Normal; +out vec2 TexCoords; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0f); + FragPos = vec3(model * vec4(aPos, 1.0)); + Normal = mat3(transpose(inverse(model))) * aNormal; + TexCoords = aTexCoords; +} diff --git a/18-depth-testing/shaders/17-frag.glsl b/18-depth-testing/shaders/17-frag.glsl new file mode 100644 index 0000000..4ca5ff5 --- /dev/null +++ b/18-depth-testing/shaders/17-frag.glsl @@ -0,0 +1,162 @@ +#version 330 core +struct Material { + sampler2D diffuse; + sampler2D specular; + float shininess; +}; + +out vec4 FragColor; +in vec3 FragPos; +in vec3 Normal; +in vec2 TexCoords; + +uniform vec3 viewPos; +uniform Material material; + +struct DirLight { + vec3 direction; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +struct PointLight { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; + float constant; + float linear; + float quadratic; +}; + +struct SpotLight { + vec3 direction; + vec3 position; + vec3 diffuse; + vec3 specular; + vec3 ambient; + + float constant; + float linear; + float quadratic; + float cut_off; + float outer_cut_off; +}; + + +#define MAX_LIGHTS 4 +uniform int pointLightCount = 0; +uniform PointLight pointLights[MAX_LIGHTS]; + +uniform int dirLightCount = 0; +uniform DirLight dirLights[MAX_LIGHTS]; + +uniform int spotLightCount = 0; +uniform SpotLight spotLights[MAX_LIGHTS]; + +vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + + vec3 lightDir = normalize(-light.direction); + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + return ambient + diffuse + specular; +} + +vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 lightDir = normalize(light.position - fragPos); + + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + // attenuation + float distance = length(light.position - fragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + return ambient + diffuse + specular; +} + +vec3 CalcSpotLight(SpotLight light, vec3 normal, vec3 fragPos, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 lightDir = normalize(light.position - fragPos); + + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + // attenuation + float distance = length(light.position - fragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + float theta = dot(lightDir, normalize(-light.direction)); + float epsilon = light.cut_off - light.outer_cut_off; + float intensity = clamp((theta - light.outer_cut_off) / epsilon, 0.0, 1.0); + diffuse *= intensity; + specular *= intensity; + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + return ambient + diffuse + specular; +} + +void main() +{ + vec3 norm = normalize(Normal); + vec3 viewDir = normalize(viewPos - FragPos); + + // kick it off with the first dirlight + vec3 result = CalcDirLight(dirLights[0], norm, viewDir); + + // then augment with more (off by one) + for(int i = 1; i < dirLightCount; i++) { + result += CalcDirLight(dirLights[i], norm, viewDir); + } + + for(int i = 0; i < pointLightCount; i++) { + result += CalcPointLight(pointLights[i], norm, FragPos, viewDir); + } + + for(int i = 0; i < spotLightCount; i++) { + result += CalcSpotLight(spotLights[i], norm, FragPos, viewDir); + } + + FragColor = vec4(result, 1.0); +} diff --git a/18-depth-testing/shaders/17-lightsource.frag.glsl b/18-depth-testing/shaders/17-lightsource.frag.glsl new file mode 100644 index 0000000..30728b2 --- /dev/null +++ b/18-depth-testing/shaders/17-lightsource.frag.glsl @@ -0,0 +1,9 @@ +#version 330 core +out vec4 FragColor; + +uniform vec3 diffuse; + +void main() +{ + FragColor = vec4(diffuse, 1.0); // set all 4 vector values to 1.0 +} diff --git a/18-depth-testing/shaders/17-vert.glsl b/18-depth-testing/shaders/17-vert.glsl new file mode 100644 index 0000000..276f393 --- /dev/null +++ b/18-depth-testing/shaders/17-vert.glsl @@ -0,0 +1,20 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aNormal; +layout (location = 2) in vec2 aTexCoords; + +out vec3 FragPos; +out vec3 Normal; +out vec2 TexCoords; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0f); + FragPos = vec3(model * vec4(aPos, 1.0)); + Normal = mat3(transpose(inverse(model))) * aNormal; + TexCoords = aTexCoords; +} diff --git a/18-depth-testing/shaders/18-frag.glsl b/18-depth-testing/shaders/18-frag.glsl new file mode 100644 index 0000000..4ca5ff5 --- /dev/null +++ b/18-depth-testing/shaders/18-frag.glsl @@ -0,0 +1,162 @@ +#version 330 core +struct Material { + sampler2D diffuse; + sampler2D specular; + float shininess; +}; + +out vec4 FragColor; +in vec3 FragPos; +in vec3 Normal; +in vec2 TexCoords; + +uniform vec3 viewPos; +uniform Material material; + +struct DirLight { + vec3 direction; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +struct PointLight { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; + float constant; + float linear; + float quadratic; +}; + +struct SpotLight { + vec3 direction; + vec3 position; + vec3 diffuse; + vec3 specular; + vec3 ambient; + + float constant; + float linear; + float quadratic; + float cut_off; + float outer_cut_off; +}; + + +#define MAX_LIGHTS 4 +uniform int pointLightCount = 0; +uniform PointLight pointLights[MAX_LIGHTS]; + +uniform int dirLightCount = 0; +uniform DirLight dirLights[MAX_LIGHTS]; + +uniform int spotLightCount = 0; +uniform SpotLight spotLights[MAX_LIGHTS]; + +vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + + vec3 lightDir = normalize(-light.direction); + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + return ambient + diffuse + specular; +} + +vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 lightDir = normalize(light.position - fragPos); + + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + // attenuation + float distance = length(light.position - fragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + return ambient + diffuse + specular; +} + +vec3 CalcSpotLight(SpotLight light, vec3 normal, vec3 fragPos, vec3 viewDir) +{ + vec3 mat_tex = vec3(texture(material.diffuse, TexCoords)); + vec3 spec_tex = vec3(texture(material.specular, TexCoords)); + vec3 lightDir = normalize(light.position - fragPos); + + // diffuse shading + float diff = max(dot(normal, lightDir), 0.0); + + // specular shading + vec3 reflectDir = reflect(-lightDir, normal); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + + // attenuation + float distance = length(light.position - fragPos); + float attenuation = 1.0 / (light.constant + light.linear * distance + light.quadratic * (distance * distance)); + + vec3 ambient = light.ambient * mat_tex; + vec3 diffuse = light.diffuse * diff * mat_tex; + vec3 specular = light.specular * spec * spec_tex; + + float theta = dot(lightDir, normalize(-light.direction)); + float epsilon = light.cut_off - light.outer_cut_off; + float intensity = clamp((theta - light.outer_cut_off) / epsilon, 0.0, 1.0); + diffuse *= intensity; + specular *= intensity; + + ambient *= attenuation; + diffuse *= attenuation; + specular *= attenuation; + + return ambient + diffuse + specular; +} + +void main() +{ + vec3 norm = normalize(Normal); + vec3 viewDir = normalize(viewPos - FragPos); + + // kick it off with the first dirlight + vec3 result = CalcDirLight(dirLights[0], norm, viewDir); + + // then augment with more (off by one) + for(int i = 1; i < dirLightCount; i++) { + result += CalcDirLight(dirLights[i], norm, viewDir); + } + + for(int i = 0; i < pointLightCount; i++) { + result += CalcPointLight(pointLights[i], norm, FragPos, viewDir); + } + + for(int i = 0; i < spotLightCount; i++) { + result += CalcSpotLight(spotLights[i], norm, FragPos, viewDir); + } + + FragColor = vec4(result, 1.0); +} diff --git a/18-depth-testing/shaders/18-lightsource.frag.glsl b/18-depth-testing/shaders/18-lightsource.frag.glsl new file mode 100644 index 0000000..30728b2 --- /dev/null +++ b/18-depth-testing/shaders/18-lightsource.frag.glsl @@ -0,0 +1,9 @@ +#version 330 core +out vec4 FragColor; + +uniform vec3 diffuse; + +void main() +{ + FragColor = vec4(diffuse, 1.0); // set all 4 vector values to 1.0 +} diff --git a/18-depth-testing/shaders/18-vert.glsl b/18-depth-testing/shaders/18-vert.glsl new file mode 100644 index 0000000..276f393 --- /dev/null +++ b/18-depth-testing/shaders/18-vert.glsl @@ -0,0 +1,20 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aNormal; +layout (location = 2) in vec2 aTexCoords; + +out vec3 FragPos; +out vec3 Normal; +out vec2 TexCoords; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0f); + FragPos = vec3(model * vec4(aPos, 1.0)); + Normal = mat3(transpose(inverse(model))) * aNormal; + TexCoords = aTexCoords; +} diff --git a/18-depth-testing/shaders/3.3.shader.fs b/18-depth-testing/shaders/3.3.shader.fs new file mode 100644 index 0000000..efe6832 --- /dev/null +++ b/18-depth-testing/shaders/3.3.shader.fs @@ -0,0 +1,8 @@ +#version 330 core +out vec4 FragColor; +in vec3 ourColor; + +void main() +{ + FragColor = vec4(ourColor, 1.0); +} diff --git a/18-depth-testing/shaders/3.3.shader.vs b/18-depth-testing/shaders/3.3.shader.vs new file mode 100644 index 0000000..21cf8d2 --- /dev/null +++ b/18-depth-testing/shaders/3.3.shader.vs @@ -0,0 +1,11 @@ +#version 330 core +layout (location = 0) in vec3 aPos; // the position variable has attribute position 0 +layout (location = 1) in vec3 aColor; + +out vec3 ourColor; + +void main() +{ + gl_Position = vec4(aPos, 1.0); // see how we directly give a vec3 to vec4's constructor + ourColor = aColor; +} diff --git a/18-depth-testing/shaders/4.2.texture.fs b/18-depth-testing/shaders/4.2.texture.fs new file mode 100644 index 0000000..80ee6a7 --- /dev/null +++ b/18-depth-testing/shaders/4.2.texture.fs @@ -0,0 +1,11 @@ +#version 330 core + +out vec4 FragColor; +in vec2 TexCoord; + +uniform sampler2D texture1; + +void main() +{ + FragColor = texture(texture1, TexCoord); +} diff --git a/18-depth-testing/shaders/4.2.texture.vs b/18-depth-testing/shaders/4.2.texture.vs new file mode 100644 index 0000000..85c9de7 --- /dev/null +++ b/18-depth-testing/shaders/4.2.texture.vs @@ -0,0 +1,15 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoord; + +out vec2 TexCoord; + +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0f); + TexCoord = vec2(aTexCoord.x, aTexCoord.y); +} diff --git a/18-depth-testing/src/KHR/khrplatform.h b/18-depth-testing/src/KHR/khrplatform.h new file mode 100644 index 0000000..0164644 --- /dev/null +++ b/18-depth-testing/src/KHR/khrplatform.h @@ -0,0 +1,311 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2018 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. + * + * The master copy of khrplatform.h is maintained in the Khronos EGL + * Registry repository at https://github.com/KhronosGroup/EGL-Registry + * The last semantic modification to khrplatform.h was at commit ID: + * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 + * + * 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 filing pull requests or issues on + * the EGL Registry repository linked above. + * + * + * 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; + */ + +#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) +# define KHRONOS_STATIC 1 +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(KHRONOS_STATIC) + /* If the preprocessor constant KHRONOS_STATIC is defined, make the + * header compatible with static linking. */ +# define KHRONOS_APICALL +#elif defined(_WIN32) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#elif defined(__ANDROID__) +# define KHRONOS_APICALL __attribute__((visibility("default"))) +#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 +/* + * To support platform where unsigned long cannot be used interchangeably with + * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. + * Ideally, we could just use (u)intptr_t everywhere, but this could result in + * ABI breakage if khronos_uintptr_t is changed from unsigned long to + * unsigned long long or similar (this results in different C++ name mangling). + * To avoid changes for existing platforms, we restrict usage of intptr_t to + * platforms where the size of a pointer is larger than the size of long. + */ +#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) +#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ +#define KHRONOS_USE_INTPTR_T +#endif +#endif + +#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 KHRONOS_USE_INTPTR_T +typedef intptr_t khronos_intptr_t; +typedef uintptr_t khronos_uintptr_t; +#elif defined(_WIN64) +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +#endif + +#if defined(_WIN64) +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +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_ */ diff --git a/18-depth-testing/src/camera.cpp b/18-depth-testing/src/camera.cpp new file mode 100644 index 0000000..0d45d05 --- /dev/null +++ b/18-depth-testing/src/camera.cpp @@ -0,0 +1,70 @@ +#include "camera.hpp" +#include +#include + +glm::mat4 Camera::look_at() { + return glm::lookAt(position, position + front, up); +} + +void Camera::forward() { + dirty = true; + position += speed * front; +} + +void Camera::back() { + dirty = true; + position -= speed * front; +} + +void Camera::left() { + dirty = true; + position -= glm::normalize(glm::cross(front, up)) * speed; +} + +void Camera::right() { + dirty = true; + position += glm::normalize(glm::cross(front, up)) * speed; +} + +void Camera::update(float deltaTime) { + speed = movement_speed * deltaTime; +} + +void Camera::mouse_move(double xpos, double ypos) { + dirty = true; + + if(firstMouse) { + lastX = xpos; + lastY = ypos; + firstMouse = false; + } + + float xoffset = xpos - lastX; + float yoffset = lastY - ypos; + lastX = xpos; + lastY = ypos; + + const float sensitivity = 0.1f; + xoffset *= sensitivity; + yoffset *= sensitivity; + + yaw += xoffset; + pitch += yoffset; + + if(pitch > 89.0f) pitch = 89.0f; + if(pitch < -89.0f) pitch = -89.0f; + + direction.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch)); + direction.y = sin(glm::radians(pitch)); + direction.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch)); + + front = glm::normalize(direction); +} + +void Camera::mouse_scroll(double xoffset, double yoffset) { + dirty = true; + fov -= (float)yoffset; + + if(fov < 1.0f) fov = 1.0f; + if(fov > 90.0f) fov = 90.0f; +} diff --git a/18-depth-testing/src/camera.hpp b/18-depth-testing/src/camera.hpp new file mode 100644 index 0000000..e97eeef --- /dev/null +++ b/18-depth-testing/src/camera.hpp @@ -0,0 +1,28 @@ +#pragma once +#include + +struct Camera { + glm::vec3 position{0.0f, 0.0f, 3.0f}; + glm::vec3 front{0.0f, 0.0f, -1.0f}; + glm::vec3 up{0.0f, 1.0f, 0.0f}; + glm::vec3 direction{0.0f, 0.0f, 0.0f}; + float movement_speed = 20.0f; + + float pitch = 0.0f; + float yaw = -90.0f; + float speed = 0.05f; + float lastX = 400; + float lastY = 300; + float fov = 45.0f; + bool firstMouse = true; + bool dirty = true; + + glm::mat4 look_at(); + void forward(); + void back(); + void left(); + void right(); + void update(float deltaTime); + void mouse_move(double xpos, double ypos); + void mouse_scroll(double xoffset, double yoffset); +}; diff --git a/18-depth-testing/src/components.hpp b/18-depth-testing/src/components.hpp new file mode 100644 index 0000000..859e94a --- /dev/null +++ b/18-depth-testing/src/components.hpp @@ -0,0 +1,105 @@ +#pragma once + +#include +#include +#include +#include "json.hpp" + +const unsigned int SCR_WIDTH = 800; +const unsigned int SCR_HEIGHT = 600; + +#define MAX_LIGHTS 4 + +namespace components { + template struct NameOf; + + struct Material { + glm::vec3 ambient{0.1f,0.1f,0.1f}; + float shininess{32.0f}; + unsigned int diffuseMap = 0; + unsigned int specularMap = 0; + }; + + ENROLL_COMPONENT(Material, ambient, shininess, diffuseMap, specularMap); + + struct Light { + glm::vec3 position{0.0f, 0.0f, 0.0f}; + glm::vec3 direction{0.0f, 0.0f, 0.0f}; + glm::vec3 ambient{0.0f, 0.0f, 0.0f}; + glm::vec3 diffuse{0.0f, 0.0f, 0.0f}; + glm::vec3 specular{0.0f, 0.0f, 0.0f}; + + float constant=0.0f; + float linear=0.0f; + float quadratic=0.0f; + float cut_off=0.0f; + float outer_cut_off=0.0f; + + void adjust(float amount) { + ambient += amount; + diffuse += amount; + specular += amount; + } + }; + + ENROLL_COMPONENT(Light, + position, direction, + ambient, diffuse, specular, + constant, linear, quadratic, + cut_off, outer_cut_off); + + struct Lighting { + std::vector directional; + std::vector positioned; + std::vector spot; + Light camera; + }; + + ENROLL_COMPONENT(Lighting, directional, positioned, spot, camera); + + struct Camera { + glm::vec3 position{0.0f, 0.0f, 3.0f}; + glm::vec3 front{0.0f, 0.0f, -1.0f}; + glm::vec3 up{0.0f, 1.0f, 0.0f}; + glm::vec3 direction{0.0f, 0.0f, 0.0f}; + float movement_speed = 20.0f; + }; + + ENROLL_COMPONENT(Camera, position, front, up, direction, movement_speed); + + struct Model { + std::string directory; + std::string model_path; + }; + + ENROLL_COMPONENT(Model, directory, model_path); + + using Position = glm::vec3; + + struct Thing { + std::string model; + Position position; + std::string material; + }; + + ENROLL_COMPONENT(Thing, model, position, material); + + struct Shader { + std::string vertex_path; + std::string frag_path; + }; + + ENROLL_COMPONENT(Shader, vertex_path, frag_path); + + struct Scene { + components::Shader shader; + components::Shader light_shader; + std::map materials; + std::map models; + std::vector things; + Camera camera; + Lighting light; + }; + + ENROLL_COMPONENT(Scene, shader, light_shader, materials, models, things, camera, light); +} diff --git a/18-depth-testing/src/dbc.cpp b/18-depth-testing/src/dbc.cpp new file mode 100644 index 0000000..63e3aeb --- /dev/null +++ b/18-depth-testing/src/dbc.cpp @@ -0,0 +1,47 @@ +#include "dbc.hpp" +#include + +void dbc::log(const string &message, const std::source_location location) { + std::cout << '[' << location.file_name() << ':' + << location.line() << "|" + << location.function_name() << "] " + << message << std::endl; +} + +void dbc::sentinel(const string &message, const std::source_location location) { + string err = $F("[SENTINEL!] {}", message); + dbc::log(err, location); + throw dbc::SentinelError(err); +} + +void dbc::pre(const string &message, bool test, const std::source_location location) { + if(!test) { + string err = $F("[PRE!] {}", message); + dbc::log(err, location); + throw dbc::PreCondError(err); + } +} + +void dbc::pre(const string &message, std::function tester, const std::source_location location) { + dbc::pre(message, tester(), location); +} + +void dbc::post(const string &message, bool test, const std::source_location location) { + if(!test) { + string err = $F("[POST!] {}", message); + dbc::log(err, location); + throw dbc::PostCondError(err); + } +} + +void dbc::post(const string &message, std::function tester, const std::source_location location) { + dbc::post(message, tester(), location); +} + +void dbc::check(bool test, const string &message, const std::source_location location) { + if(!test) { + string err = $F("[CHECK!] {}\n", message); + dbc::log(err, location); + throw dbc::CheckError(err); + } +} diff --git a/18-depth-testing/src/dbc.hpp b/18-depth-testing/src/dbc.hpp new file mode 100644 index 0000000..4b17b71 --- /dev/null +++ b/18-depth-testing/src/dbc.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include +#include +#include +#include + +// AKA the Fuckit macro +#define $F(FMT, ...) fmt::format(FMT, ##__VA_ARGS__) + +namespace dbc { + using std::string; + + using CheckError = std::runtime_error; + using SentinelError = std::runtime_error; + using PreCondError = std::runtime_error; + using PostCondError = std::runtime_error; + + void log(const string &message, + const std::source_location location = + std::source_location::current()); + + [[noreturn]] void sentinel(const string &message, + const std::source_location location = + std::source_location::current()); + + void pre(const string &message, bool test, + const std::source_location location = + std::source_location::current()); + + void pre(const string &message, std::function tester, + const std::source_location location = + std::source_location::current()); + + void post(const string &message, bool test, + const std::source_location location = + std::source_location::current()); + + void post(const string &message, std::function tester, + const std::source_location location = + std::source_location::current()); + + void check(bool test, const string &message, + const std::source_location location = + std::source_location::current()); +} diff --git a/18-depth-testing/src/glad/glad.cpp b/18-depth-testing/src/glad/glad.cpp new file mode 100644 index 0000000..c80f1e3 --- /dev/null +++ b/18-depth-testing/src/glad/glad.cpp @@ -0,0 +1,1140 @@ +/* + + OpenGL loader generated by glad 0.1.36 on Sat Nov 22 15:57:33 2025. + + Language/Generator: C/C++ + Specification: gl + APIs: gl=3.3 + Profile: core + Extensions: + + Loader: True + Local files: False + Omit khrplatform: False + Reproducible: False + + Commandline: + --profile="core" --api="gl=3.3" --generator="c" --spec="gl" --extensions="" + Online: + https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3 +*/ + +#include +#include +#include +#include + +static void* get_proc(const char *namez); + +#if defined(_WIN32) || defined(__CYGWIN__) +#ifndef _WINDOWS_ +#undef APIENTRY +#endif +#include +static HMODULE libGL; + +typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); +static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; + +#ifdef _MSC_VER +#ifdef __has_include + #if __has_include() + #define HAVE_WINAPIFAMILY 1 + #endif +#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ + #define HAVE_WINAPIFAMILY 1 +#endif +#endif + +#ifdef HAVE_WINAPIFAMILY + #include + #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) + #define IS_UWP 1 + #endif +#endif + +static +int open_gl(void) { +#ifndef IS_UWP + libGL = LoadLibraryW(L"opengl32.dll"); + if(libGL != NULL) { + void (* tmp)(void); + tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); + gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; + return gladGetProcAddressPtr != NULL; + } +#endif + + return 0; +} + +static +void close_gl(void) { + if(libGL != NULL) { + FreeLibrary((HMODULE) libGL); + libGL = NULL; + } +} +#else +#include +static void* libGL; + +#if !defined(__APPLE__) && !defined(__HAIKU__) +typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); +static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; +#endif + +static +int open_gl(void) { +#ifdef __APPLE__ + static const char *NAMES[] = { + "../Frameworks/OpenGL.framework/OpenGL", + "/Library/Frameworks/OpenGL.framework/OpenGL", + "/System/Library/Frameworks/OpenGL.framework/OpenGL", + "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" + }; +#else + static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; +#endif + + unsigned int index = 0; + for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { + libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); + + if(libGL != NULL) { +#if defined(__APPLE__) || defined(__HAIKU__) + return 1; +#else + gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, + "glXGetProcAddressARB"); + return gladGetProcAddressPtr != NULL; +#endif + } + } + + return 0; +} + +static +void close_gl(void) { + if(libGL != NULL) { + dlclose(libGL); + libGL = NULL; + } +} +#endif + +static +void* get_proc(const char *namez) { + void* result = NULL; + if(libGL == NULL) return NULL; + +#if !defined(__APPLE__) && !defined(__HAIKU__) + if(gladGetProcAddressPtr != NULL) { + result = gladGetProcAddressPtr(namez); + } +#endif + if(result == NULL) { +#if defined(_WIN32) || defined(__CYGWIN__) + result = (void*)GetProcAddress((HMODULE) libGL, namez); +#else + result = dlsym(libGL, namez); +#endif + } + + return result; +} + +int gladLoadGL(void) { + int status = 0; + + if(open_gl()) { + status = gladLoadGLLoader(&get_proc); + close_gl(); + } + + return status; +} + +struct gladGLversionStruct GLVersion = { 0, 0 }; + +#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) +#define _GLAD_IS_SOME_NEW_VERSION 1 +#endif + +static int max_loaded_major; +static int max_loaded_minor; + +static const char *exts = NULL; +static int num_exts_i = 0; +static char **exts_i = NULL; + +static int get_exts(void) { +#ifdef _GLAD_IS_SOME_NEW_VERSION + if(max_loaded_major < 3) { +#endif + exts = (const char *)glGetString(GL_EXTENSIONS); +#ifdef _GLAD_IS_SOME_NEW_VERSION + } else { + int index; + + num_exts_i = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); + if (num_exts_i > 0) { + exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i)); + } + + if (exts_i == NULL) { + return 0; + } + + for(index = 0; index < num_exts_i; index++) { + const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); + size_t len = strlen(gl_str_tmp); + + char *local_str = (char*)malloc((len+1) * sizeof(char)); + if(local_str != NULL) { + memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char)); + } + exts_i[index] = local_str; + } + } +#endif + return 1; +} + +static void free_exts(void) { + if (exts_i != NULL) { + int index; + for(index = 0; index < num_exts_i; index++) { + free((char *)exts_i[index]); + } + free((void *)exts_i); + exts_i = NULL; + } +} + +static int has_ext(const char *ext) { +#ifdef _GLAD_IS_SOME_NEW_VERSION + if(max_loaded_major < 3) { +#endif + const char *extensions; + const char *loc; + const char *terminator; + extensions = exts; + if(extensions == NULL || ext == NULL) { + return 0; + } + + while(1) { + loc = strstr(extensions, ext); + if(loc == NULL) { + return 0; + } + + terminator = loc + strlen(ext); + if((loc == extensions || *(loc - 1) == ' ') && + (*terminator == ' ' || *terminator == '\0')) { + return 1; + } + extensions = terminator; + } +#ifdef _GLAD_IS_SOME_NEW_VERSION + } else { + int index; + if(exts_i == NULL) return 0; + for(index = 0; index < num_exts_i; index++) { + const char *e = exts_i[index]; + + if(exts_i[index] != NULL && strcmp(e, ext) == 0) { + return 1; + } + } + } +#endif + + return 0; +} +int GLAD_GL_VERSION_1_0 = 0; +int GLAD_GL_VERSION_1_1 = 0; +int GLAD_GL_VERSION_1_2 = 0; +int GLAD_GL_VERSION_1_3 = 0; +int GLAD_GL_VERSION_1_4 = 0; +int GLAD_GL_VERSION_1_5 = 0; +int GLAD_GL_VERSION_2_0 = 0; +int GLAD_GL_VERSION_2_1 = 0; +int GLAD_GL_VERSION_3_0 = 0; +int GLAD_GL_VERSION_3_1 = 0; +int GLAD_GL_VERSION_3_2 = 0; +int GLAD_GL_VERSION_3_3 = 0; +PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; +PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; +PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; +PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; +PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; +PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; +PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; +PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; +PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; +PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; +PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; +PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; +PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; +PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; +PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; +PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; +PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; +PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; +PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; +PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; +PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; +PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; +PFNGLBUFFERDATAPROC glad_glBufferData = NULL; +PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; +PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; +PFNGLCLEARPROC glad_glClear = NULL; +PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; +PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; +PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; +PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; +PFNGLCLEARCOLORPROC glad_glClearColor = NULL; +PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; +PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; +PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; +PFNGLCOLORMASKPROC glad_glColorMask = NULL; +PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; +PFNGLCOLORP3UIPROC glad_glColorP3ui = NULL; +PFNGLCOLORP3UIVPROC glad_glColorP3uiv = NULL; +PFNGLCOLORP4UIPROC glad_glColorP4ui = NULL; +PFNGLCOLORP4UIVPROC glad_glColorP4uiv = NULL; +PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; +PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; +PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; +PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; +PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; +PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; +PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; +PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; +PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; +PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; +PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; +PFNGLCREATESHADERPROC glad_glCreateShader = NULL; +PFNGLCULLFACEPROC glad_glCullFace = NULL; +PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; +PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; +PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; +PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; +PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; +PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; +PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; +PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; +PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; +PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; +PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; +PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; +PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; +PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; +PFNGLDISABLEPROC glad_glDisable = NULL; +PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; +PFNGLDISABLEIPROC glad_glDisablei = NULL; +PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; +PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; +PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; +PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; +PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; +PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; +PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; +PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; +PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; +PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL; +PFNGLENABLEPROC glad_glEnable = NULL; +PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; +PFNGLENABLEIPROC glad_glEnablei = NULL; +PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; +PFNGLENDQUERYPROC glad_glEndQuery = NULL; +PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; +PFNGLFENCESYNCPROC glad_glFenceSync = NULL; +PFNGLFINISHPROC glad_glFinish = NULL; +PFNGLFLUSHPROC glad_glFlush = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; +PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; +PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; +PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; +PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; +PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; +PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; +PFNGLFRONTFACEPROC glad_glFrontFace = NULL; +PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; +PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; +PFNGLGENQUERIESPROC glad_glGenQueries = NULL; +PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; +PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; +PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; +PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; +PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; +PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; +PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; +PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; +PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; +PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL; +PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; +PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; +PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; +PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; +PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; +PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; +PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; +PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; +PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; +PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; +PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; +PFNGLGETERRORPROC glad_glGetError = NULL; +PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; +PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; +PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; +PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; +PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; +PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; +PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; +PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; +PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; +PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; +PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; +PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; +PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL; +PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; +PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; +PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; +PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL; +PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL; +PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; +PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; +PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; +PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; +PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; +PFNGLGETSTRINGPROC glad_glGetString = NULL; +PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; +PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; +PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; +PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; +PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; +PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; +PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; +PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; +PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; +PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; +PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; +PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; +PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; +PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; +PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; +PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; +PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; +PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; +PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; +PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; +PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; +PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; +PFNGLHINTPROC glad_glHint = NULL; +PFNGLISBUFFERPROC glad_glIsBuffer = NULL; +PFNGLISENABLEDPROC glad_glIsEnabled = NULL; +PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; +PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; +PFNGLISPROGRAMPROC glad_glIsProgram = NULL; +PFNGLISQUERYPROC glad_glIsQuery = NULL; +PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; +PFNGLISSAMPLERPROC glad_glIsSampler = NULL; +PFNGLISSHADERPROC glad_glIsShader = NULL; +PFNGLISSYNCPROC glad_glIsSync = NULL; +PFNGLISTEXTUREPROC glad_glIsTexture = NULL; +PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; +PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; +PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; +PFNGLLOGICOPPROC glad_glLogicOp = NULL; +PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; +PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; +PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; +PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; +PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; +PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui = NULL; +PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv = NULL; +PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui = NULL; +PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv = NULL; +PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL; +PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL; +PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL; +PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL; +PFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL; +PFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL; +PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; +PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; +PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; +PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; +PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; +PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; +PFNGLPOINTSIZEPROC glad_glPointSize = NULL; +PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; +PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; +PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; +PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; +PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; +PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; +PFNGLREADPIXELSPROC glad_glReadPixels = NULL; +PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; +PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; +PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL; +PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL; +PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL; +PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; +PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; +PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; +PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; +PFNGLSCISSORPROC glad_glScissor = NULL; +PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui = NULL; +PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv = NULL; +PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; +PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; +PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; +PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; +PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; +PFNGLSTENCILOPPROC glad_glStencilOp = NULL; +PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; +PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; +PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL; +PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL; +PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL; +PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv = NULL; +PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui = NULL; +PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv = NULL; +PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui = NULL; +PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv = NULL; +PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; +PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; +PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL; +PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; +PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL; +PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; +PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; +PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; +PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; +PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; +PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; +PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; +PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; +PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; +PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; +PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; +PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; +PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; +PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; +PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; +PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; +PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; +PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; +PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; +PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; +PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; +PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; +PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; +PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; +PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; +PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; +PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; +PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; +PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; +PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; +PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; +PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; +PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; +PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; +PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; +PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; +PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; +PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; +PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; +PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; +PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; +PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; +PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; +PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; +PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; +PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; +PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; +PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; +PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; +PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; +PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; +PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; +PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; +PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; +PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; +PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; +PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; +PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; +PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; +PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; +PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; +PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; +PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; +PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; +PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; +PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; +PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; +PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; +PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; +PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; +PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; +PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; +PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; +PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; +PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; +PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; +PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; +PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; +PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; +PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; +PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; +PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; +PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; +PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; +PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; +PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; +PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; +PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; +PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; +PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; +PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; +PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; +PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; +PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; +PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; +PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; +PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; +PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; +PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; +PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; +PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; +PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; +PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; +PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; +PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; +PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; +PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; +PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL; +PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL; +PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL; +PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; +PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; +PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; +PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; +PFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL; +PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL; +PFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL; +PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv = NULL; +PFNGLVERTEXP4UIPROC glad_glVertexP4ui = NULL; +PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv = NULL; +PFNGLVIEWPORTPROC glad_glViewport = NULL; +PFNGLWAITSYNCPROC glad_glWaitSync = NULL; +static void load_GL_VERSION_1_0(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_0) return; + glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); + glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); + glad_glHint = (PFNGLHINTPROC)load("glHint"); + glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); + glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); + glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode"); + glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); + glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); + glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); + glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); + glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); + glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D"); + glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); + glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer"); + glad_glClear = (PFNGLCLEARPROC)load("glClear"); + glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); + glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); + glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth"); + glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); + glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); + glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); + glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); + glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); + glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); + glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); + glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); + glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); + glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); + glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); + glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); + glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref"); + glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); + glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); + glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); + glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); + glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev"); + glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); + glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); + glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); + glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); + glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage"); + glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); + glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); + glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); + glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); + glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); + glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange"); + glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); +} +static void load_GL_VERSION_1_1(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_1) return; + glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); + glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); + glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); + glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D"); + glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); + glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D"); + glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); + glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D"); + glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); + glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); + glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); + glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); + glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); +} +static void load_GL_VERSION_1_2(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_2) return; + glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); + glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); + glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); + glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); +} +static void load_GL_VERSION_1_3(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_3) return; + glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); + glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); + glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); + glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); + glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D"); + glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); + glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); + glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D"); + glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage"); +} +static void load_GL_VERSION_1_4(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_4) return; + glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); + glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays"); + glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements"); + glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); + glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); + glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri"); + glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv"); + glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); + glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); +} +static void load_GL_VERSION_1_5(GLADloadproc load) { + if(!GLAD_GL_VERSION_1_5) return; + glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); + glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); + glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); + glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); + glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); + glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); + glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv"); + glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); + glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); + glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); + glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); + glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); + glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); + glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); + glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData"); + glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer"); + glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); + glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); + glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); +} +static void load_GL_VERSION_2_0(GLADloadproc load) { + if(!GLAD_GL_VERSION_2_0) return; + glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); + glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); + glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); + glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); + glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); + glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); + glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); + glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); + glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); + glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); + glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); + glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); + glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); + glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); + glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); + glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); + glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); + glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); + glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); + glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); + glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); + glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); + glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); + glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); + glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); + glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); + glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); + glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv"); + glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); + glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); + glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); + glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); + glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); + glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); + glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); + glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); + glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); + glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); + glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); + glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); + glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); + glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); + glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); + glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); + glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); + glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); + glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); + glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); + glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); + glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); + glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); + glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); + glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); + glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); + glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); + glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); + glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d"); + glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv"); + glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); + glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); + glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s"); + glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv"); + glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d"); + glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv"); + glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); + glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); + glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s"); + glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv"); + glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d"); + glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv"); + glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); + glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); + glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s"); + glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv"); + glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv"); + glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv"); + glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv"); + glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub"); + glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv"); + glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv"); + glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv"); + glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv"); + glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d"); + glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv"); + glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); + glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); + glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv"); + glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s"); + glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv"); + glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv"); + glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv"); + glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv"); + glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); +} +static void load_GL_VERSION_2_1(GLADloadproc load) { + if(!GLAD_GL_VERSION_2_1) return; + glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); + glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); + glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); + glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); + glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); + glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); +} +static void load_GL_VERSION_3_0(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_0) return; + glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); + glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); + glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); + glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); + glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); + glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); + glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); + glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); + glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); + glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor"); + glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender"); + glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender"); + glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); + glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); + glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); + glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i"); + glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i"); + glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i"); + glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); + glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui"); + glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui"); + glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui"); + glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); + glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv"); + glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv"); + glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv"); + glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); + glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv"); + glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv"); + glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv"); + glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); + glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv"); + glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv"); + glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv"); + glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv"); + glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); + glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation"); + glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); + glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); + glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); + glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); + glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); + glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); + glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); + glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); + glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); + glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); + glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); + glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); + glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); + glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); + glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); + glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); + glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); + glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); + glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); + glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); + glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); + glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); + glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); + glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); + glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); + glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); + glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); + glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); + glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); + glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); + glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); + glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); + glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); + glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); + glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); + glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); + glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); + glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); + glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); + glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); + glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); + glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); + glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); + glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); +} +static void load_GL_VERSION_3_1(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_1) return; + glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); + glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); + glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); + glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex"); + glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); + glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); + glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); + glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); + glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); + glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); + glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); + glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); + glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); + glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); + glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); +} +static void load_GL_VERSION_3_2(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_2) return; + glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); + glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); + glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); + glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); + glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); + glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); + glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); + glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); + glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); + glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); + glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); + glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); + glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); + glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); + glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); + glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); + glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); + glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); + glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); +} +static void load_GL_VERSION_3_3(GLADloadproc load) { + if(!GLAD_GL_VERSION_3_3) return; + glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); + glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); + glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); + glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); + glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); + glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); + glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); + glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); + glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); + glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); + glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); + glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); + glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); + glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); + glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); + glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); + glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); + glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); + glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); + glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); + glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); + glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); + glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); + glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); + glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); + glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); + glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); + glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); + glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); + glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); + glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); + glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); + glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); + glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); + glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); + glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); + glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); + glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); + glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); + glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); + glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); + glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); + glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); + glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); + glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); + glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); + glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); + glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); + glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); + glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); + glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); + glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); + glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); + glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); + glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); + glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); + glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); + glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); +} +static int find_extensionsGL(void) { + if (!get_exts()) return 0; + (void)&has_ext; + free_exts(); + return 1; +} + +static void find_coreGL(void) { + + /* Thank you @elmindreda + * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 + * https://github.com/glfw/glfw/blob/master/src/context.c#L36 + */ + int i, major, minor; + + const char* version; + const char* prefixes[] = { + "OpenGL ES-CM ", + "OpenGL ES-CL ", + "OpenGL ES ", + NULL + }; + + version = (const char*) glGetString(GL_VERSION); + if (!version) return; + + for (i = 0; prefixes[i]; i++) { + const size_t length = strlen(prefixes[i]); + if (strncmp(version, prefixes[i], length) == 0) { + version += length; + break; + } + } + +/* PR #18 */ +#ifdef _MSC_VER + sscanf_s(version, "%d.%d", &major, &minor); +#else + sscanf(version, "%d.%d", &major, &minor); +#endif + + GLVersion.major = major; GLVersion.minor = minor; + max_loaded_major = major; max_loaded_minor = minor; + GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; + GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; + GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; + GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; + GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; + GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; + GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; + GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; + GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; + GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; + GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; + GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; + if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 3)) { + max_loaded_major = 3; + max_loaded_minor = 3; + } +} + +int gladLoadGLLoader(GLADloadproc load) { + GLVersion.major = 0; GLVersion.minor = 0; + glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); + if(glGetString == NULL) return 0; + if(glGetString(GL_VERSION) == NULL) return 0; + find_coreGL(); + load_GL_VERSION_1_0(load); + load_GL_VERSION_1_1(load); + load_GL_VERSION_1_2(load); + load_GL_VERSION_1_3(load); + load_GL_VERSION_1_4(load); + load_GL_VERSION_1_5(load); + load_GL_VERSION_2_0(load); + load_GL_VERSION_2_1(load); + load_GL_VERSION_3_0(load); + load_GL_VERSION_3_1(load); + load_GL_VERSION_3_2(load); + load_GL_VERSION_3_3(load); + + if (!find_extensionsGL()) return 0; + return GLVersion.major != 0 || GLVersion.minor != 0; +} + diff --git a/18-depth-testing/src/glad/glad.h b/18-depth-testing/src/glad/glad.h new file mode 100644 index 0000000..26f9677 --- /dev/null +++ b/18-depth-testing/src/glad/glad.h @@ -0,0 +1,2129 @@ +/* + + OpenGL loader generated by glad 0.1.36 on Sat Nov 22 15:57:33 2025. + + Language/Generator: C/C++ + Specification: gl + APIs: gl=3.3 + Profile: core + Extensions: + + Loader: True + Local files: False + Omit khrplatform: False + Reproducible: False + + Commandline: + --profile="core" --api="gl=3.3" --generator="c" --spec="gl" --extensions="" + Online: + https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3 +*/ + + +#ifndef __glad_h_ +#define __glad_h_ + +#ifdef __gl_h_ +#error OpenGL header already included, remove this include, glad already provides it +#endif +#define __gl_h_ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#define APIENTRY __stdcall +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY APIENTRY +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +struct gladGLversionStruct { + int major; + int minor; +}; + +typedef void* (* GLADloadproc)(const char *name); + +#ifndef GLAPI +# if defined(GLAD_GLAPI_EXPORT) +# if defined(_WIN32) || defined(__CYGWIN__) +# if defined(GLAD_GLAPI_EXPORT_BUILD) +# if defined(__GNUC__) +# define GLAPI __attribute__ ((dllexport)) extern +# else +# define GLAPI __declspec(dllexport) extern +# endif +# else +# if defined(__GNUC__) +# define GLAPI __attribute__ ((dllimport)) extern +# else +# define GLAPI __declspec(dllimport) extern +# endif +# endif +# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) +# define GLAPI __attribute__ ((visibility ("default"))) extern +# else +# define GLAPI extern +# endif +# else +# define GLAPI extern +# endif +#endif + +GLAPI struct gladGLversionStruct GLVersion; + +GLAPI int gladLoadGL(void); + +GLAPI int gladLoadGLLoader(GLADloadproc); + +#include +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef khronos_int8_t GLbyte; +typedef khronos_uint8_t GLubyte; +typedef khronos_int16_t GLshort; +typedef khronos_uint16_t GLushort; +typedef int GLint; +typedef unsigned int GLuint; +typedef khronos_int32_t GLclampx; +typedef int GLsizei; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void *GLeglClientBufferEXT; +typedef void *GLeglImageOES; +typedef char GLchar; +typedef char GLcharARB; +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef khronos_uint16_t GLhalf; +typedef khronos_uint16_t GLhalfARB; +typedef khronos_int32_t GLfixed; +typedef khronos_intptr_t GLintptr; +typedef khronos_intptr_t GLintptrARB; +typedef khronos_ssize_t GLsizeiptr; +typedef khronos_ssize_t GLsizeiptrARB; +typedef khronos_int64_t GLint64; +typedef khronos_int64_t GLint64EXT; +typedef khronos_uint64_t GLuint64; +typedef khronos_uint64_t GLuint64EXT; +typedef struct __GLsync *GLsync; +struct _cl_context; +struct _cl_event; +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +typedef unsigned short GLhalfNV; +typedef GLintptr GLvdpauSurfaceNV; +typedef void (APIENTRY *GLVULKANPROCNV)(void); +#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_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_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_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_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_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_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#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_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_VIEWPORT 0x0BA2 +#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_DRAW_BUFFER 0x0C01 +#define GL_READ_BUFFER 0x0C02 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#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_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 +#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_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 +#define GL_TEXTURE 0x1702 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#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_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#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_REPEAT 0x2901 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#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_DOUBLE 0x140A +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#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_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_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_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_BLEND_COLOR 0x8005 +#define GL_BLEND_EQUATION 0x8009 +#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_FUNC_ADD 0x8006 +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_FUNC_SUBTRACT 0x800A +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#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_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_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_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_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_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 0xFFFFFFFF +#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 0xFFFFFFFFFFFFFFFF +#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 +#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 +#ifndef GL_VERSION_1_0 +#define GL_VERSION_1_0 1 +GLAPI int GLAD_GL_VERSION_1_0; +typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode); +GLAPI PFNGLCULLFACEPROC glad_glCullFace; +#define glCullFace glad_glCullFace +typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode); +GLAPI PFNGLFRONTFACEPROC glad_glFrontFace; +#define glFrontFace glad_glFrontFace +typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode); +GLAPI PFNGLHINTPROC glad_glHint; +#define glHint glad_glHint +typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width); +GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth; +#define glLineWidth glad_glLineWidth +typedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size); +GLAPI PFNGLPOINTSIZEPROC glad_glPointSize; +#define glPointSize glad_glPointSize +typedef void (APIENTRYP PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); +GLAPI PFNGLPOLYGONMODEPROC glad_glPolygonMode; +#define glPolygonMode glad_glPolygonMode +typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLSCISSORPROC glad_glScissor; +#define glScissor glad_glScissor +typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); +GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf; +#define glTexParameterf glad_glTexParameterf +typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params); +GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; +#define glTexParameterfv glad_glTexParameterfv +typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri; +#define glTexParameteri glad_glTexParameteri +typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params); +GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; +#define glTexParameteriv glad_glTexParameteriv +typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXIMAGE1DPROC glad_glTexImage1D; +#define glTexImage1D glad_glTexImage1D +typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D; +#define glTexImage2D glad_glTexImage2D +typedef void (APIENTRYP PFNGLDRAWBUFFERPROC)(GLenum buf); +GLAPI PFNGLDRAWBUFFERPROC glad_glDrawBuffer; +#define glDrawBuffer glad_glDrawBuffer +typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask); +GLAPI PFNGLCLEARPROC glad_glClear; +#define glClear glad_glClear +typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI PFNGLCLEARCOLORPROC glad_glClearColor; +#define glClearColor glad_glClearColor +typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s); +GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil; +#define glClearStencil glad_glClearStencil +typedef void (APIENTRYP PFNGLCLEARDEPTHPROC)(GLdouble depth); +GLAPI PFNGLCLEARDEPTHPROC glad_glClearDepth; +#define glClearDepth glad_glClearDepth +typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask); +GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask; +#define glStencilMask glad_glStencilMask +typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GLAPI PFNGLCOLORMASKPROC glad_glColorMask; +#define glColorMask glad_glColorMask +typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag); +GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask; +#define glDepthMask glad_glDepthMask +typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap); +GLAPI PFNGLDISABLEPROC glad_glDisable; +#define glDisable glad_glDisable +typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap); +GLAPI PFNGLENABLEPROC glad_glEnable; +#define glEnable glad_glEnable +typedef void (APIENTRYP PFNGLFINISHPROC)(void); +GLAPI PFNGLFINISHPROC glad_glFinish; +#define glFinish glad_glFinish +typedef void (APIENTRYP PFNGLFLUSHPROC)(void); +GLAPI PFNGLFLUSHPROC glad_glFlush; +#define glFlush glad_glFlush +typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); +GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc; +#define glBlendFunc glad_glBlendFunc +typedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode); +GLAPI PFNGLLOGICOPPROC glad_glLogicOp; +#define glLogicOp glad_glLogicOp +typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); +GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc; +#define glStencilFunc glad_glStencilFunc +typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); +GLAPI PFNGLSTENCILOPPROC glad_glStencilOp; +#define glStencilOp glad_glStencilOp +typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func); +GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc; +#define glDepthFunc glad_glDepthFunc +typedef void (APIENTRYP PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); +GLAPI PFNGLPIXELSTOREFPROC glad_glPixelStoref; +#define glPixelStoref glad_glPixelStoref +typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); +GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei; +#define glPixelStorei glad_glPixelStorei +typedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src); +GLAPI PFNGLREADBUFFERPROC glad_glReadBuffer; +#define glReadBuffer glad_glReadBuffer +typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); +GLAPI PFNGLREADPIXELSPROC glad_glReadPixels; +#define glReadPixels glad_glReadPixels +typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data); +GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv; +#define glGetBooleanv glad_glGetBooleanv +typedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble *data); +GLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev; +#define glGetDoublev glad_glGetDoublev +typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void); +GLAPI PFNGLGETERRORPROC glad_glGetError; +#define glGetError glad_glGetError +typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data); +GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv; +#define glGetFloatv glad_glGetFloatv +typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data); +GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv; +#define glGetIntegerv glad_glGetIntegerv +typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name); +GLAPI PFNGLGETSTRINGPROC glad_glGetString; +#define glGetString glad_glGetString +typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI PFNGLGETTEXIMAGEPROC glad_glGetTexImage; +#define glGetTexImage glad_glGetTexImage +typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); +GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; +#define glGetTexParameterfv glad_glGetTexParameterfv +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; +#define glGetTexParameteriv glad_glGetTexParameteriv +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; +#define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; +#define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv +typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap); +GLAPI PFNGLISENABLEDPROC glad_glIsEnabled; +#define glIsEnabled glad_glIsEnabled +typedef void (APIENTRYP PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f); +GLAPI PFNGLDEPTHRANGEPROC glad_glDepthRange; +#define glDepthRange glad_glDepthRange +typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLVIEWPORTPROC glad_glViewport; +#define glViewport glad_glViewport +#endif +#ifndef GL_VERSION_1_1 +#define GL_VERSION_1_1 1 +GLAPI int GLAD_GL_VERSION_1_1; +typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); +GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays; +#define glDrawArrays glad_glDrawArrays +typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices); +GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements; +#define glDrawElements glad_glDrawElements +typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); +GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; +#define glPolygonOffset glad_glPolygonOffset +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; +#define glCopyTexImage1D glad_glCopyTexImage1D +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; +#define glCopyTexImage2D glad_glCopyTexImage2D +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; +#define glCopyTexSubImage1D glad_glCopyTexSubImage1D +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; +#define glCopyTexSubImage2D glad_glCopyTexSubImage2D +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; +#define glTexSubImage1D glad_glTexSubImage1D +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; +#define glTexSubImage2D glad_glTexSubImage2D +typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); +GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture; +#define glBindTexture glad_glBindTexture +typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures); +GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures; +#define glDeleteTextures glad_glDeleteTextures +typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures); +GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures; +#define glGenTextures glad_glGenTextures +typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture); +GLAPI PFNGLISTEXTUREPROC glad_glIsTexture; +#define glIsTexture glad_glIsTexture +#endif +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +GLAPI int GLAD_GL_VERSION_1_2; +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +GLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; +#define glDrawRangeElements glad_glDrawRangeElements +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); +GLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D; +#define glTexImage3D glad_glTexImage3D +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); +GLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; +#define glTexSubImage3D glad_glTexSubImage3D +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; +#define glCopyTexSubImage3D glad_glCopyTexSubImage3D +#endif +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +GLAPI int GLAD_GL_VERSION_1_3; +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture); +GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture; +#define glActiveTexture glad_glActiveTexture +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); +GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; +#define glSampleCoverage glad_glSampleCoverage +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; +#define glCompressedTexImage3D glad_glCompressedTexImage3D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; +#define glCompressedTexImage2D glad_glCompressedTexImage2D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; +#define glCompressedTexImage1D glad_glCompressedTexImage1D +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); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; +#define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; +#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; +#define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img); +GLAPI PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; +#define glGetCompressedTexImage glad_glGetCompressedTexImage +#endif +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +GLAPI int GLAD_GL_VERSION_1_4; +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; +#define glBlendFuncSeparate glad_glBlendFuncSeparate +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +GLAPI PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; +#define glMultiDrawArrays glad_glMultiDrawArrays +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +GLAPI PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; +#define glMultiDrawElements glad_glMultiDrawElements +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); +GLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; +#define glPointParameterf glad_glPointParameterf +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat *params); +GLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; +#define glPointParameterfv glad_glPointParameterfv +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); +GLAPI PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; +#define glPointParameteri glad_glPointParameteri +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint *params); +GLAPI PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; +#define glPointParameteriv glad_glPointParameteriv +typedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI PFNGLBLENDCOLORPROC glad_glBlendColor; +#define glBlendColor glad_glBlendColor +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode); +GLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation; +#define glBlendEquation glad_glBlendEquation +#endif +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +GLAPI int GLAD_GL_VERSION_1_5; +typedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint *ids); +GLAPI PFNGLGENQUERIESPROC glad_glGenQueries; +#define glGenQueries glad_glGenQueries +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint *ids); +GLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries; +#define glDeleteQueries glad_glDeleteQueries +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id); +GLAPI PFNGLISQUERYPROC glad_glIsQuery; +#define glIsQuery glad_glIsQuery +typedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); +GLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery; +#define glBeginQuery glad_glBeginQuery +typedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target); +GLAPI PFNGLENDQUERYPROC glad_glEndQuery; +#define glEndQuery glad_glEndQuery +typedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv; +#define glGetQueryiv glad_glGetQueryiv +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint *params); +GLAPI PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; +#define glGetQueryObjectiv glad_glGetQueryObjectiv +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint *params); +GLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; +#define glGetQueryObjectuiv glad_glGetQueryObjectuiv +typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); +GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer; +#define glBindBuffer glad_glBindBuffer +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers); +GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; +#define glDeleteBuffers glad_glDeleteBuffers +typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers); +GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers; +#define glGenBuffers glad_glGenBuffers +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer); +GLAPI PFNGLISBUFFERPROC glad_glIsBuffer; +#define glIsBuffer glad_glIsBuffer +typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GLAPI PFNGLBUFFERDATAPROC glad_glBufferData; +#define glBufferData glad_glBufferData +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; +#define glBufferSubData glad_glBufferSubData +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void *data); +GLAPI PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; +#define glGetBufferSubData glad_glGetBufferSubData +typedef void * (APIENTRYP PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); +GLAPI PFNGLMAPBUFFERPROC glad_glMapBuffer; +#define glMapBuffer glad_glMapBuffer +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target); +GLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; +#define glUnmapBuffer glad_glUnmapBuffer +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; +#define glGetBufferParameteriv glad_glGetBufferParameteriv +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void **params); +GLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; +#define glGetBufferPointerv glad_glGetBufferPointerv +#endif +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +GLAPI int GLAD_GL_VERSION_2_0; +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); +GLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; +#define glBlendEquationSeparate glad_glBlendEquationSeparate +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs); +GLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; +#define glDrawBuffers glad_glDrawBuffers +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; +#define glStencilOpSeparate glad_glStencilOpSeparate +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; +#define glStencilFuncSeparate glad_glStencilFuncSeparate +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); +GLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; +#define glStencilMaskSeparate glad_glStencilMaskSeparate +typedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); +GLAPI PFNGLATTACHSHADERPROC glad_glAttachShader; +#define glAttachShader glad_glAttachShader +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name); +GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; +#define glBindAttribLocation glad_glBindAttribLocation +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader); +GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader; +#define glCompileShader glad_glCompileShader +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(void); +GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram; +#define glCreateProgram glad_glCreateProgram +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type); +GLAPI PFNGLCREATESHADERPROC glad_glCreateShader; +#define glCreateShader glad_glCreateShader +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program); +GLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; +#define glDeleteProgram glad_glDeleteProgram +typedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader); +GLAPI PFNGLDELETESHADERPROC glad_glDeleteShader; +#define glDeleteShader glad_glDeleteShader +typedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); +GLAPI PFNGLDETACHSHADERPROC glad_glDetachShader; +#define glDetachShader glad_glDetachShader +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); +GLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; +#define glDisableVertexAttribArray glad_glDisableVertexAttribArray +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); +GLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; +#define glEnableVertexAttribArray glad_glEnableVertexAttribArray +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; +#define glGetActiveAttrib glad_glGetActiveAttrib +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; +#define glGetActiveUniform glad_glGetActiveUniform +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +GLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; +#define glGetAttachedShaders glad_glGetAttachedShaders +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name); +GLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; +#define glGetAttribLocation glad_glGetAttribLocation +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params); +GLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; +#define glGetProgramiv glad_glGetProgramiv +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; +#define glGetProgramInfoLog glad_glGetProgramInfoLog +typedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params); +GLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv; +#define glGetShaderiv glad_glGetShaderiv +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; +#define glGetShaderInfoLog glad_glGetShaderInfoLog +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; +#define glGetShaderSource glad_glGetShaderSource +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name); +GLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; +#define glGetUniformLocation glad_glGetUniformLocation +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params); +GLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; +#define glGetUniformfv glad_glGetUniformfv +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params); +GLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; +#define glGetUniformiv glad_glGetUniformiv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params); +GLAPI PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; +#define glGetVertexAttribdv glad_glGetVertexAttribdv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params); +GLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; +#define glGetVertexAttribfv glad_glGetVertexAttribfv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params); +GLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; +#define glGetVertexAttribiv glad_glGetVertexAttribiv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void **pointer); +GLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; +#define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program); +GLAPI PFNGLISPROGRAMPROC glad_glIsProgram; +#define glIsProgram glad_glIsProgram +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader); +GLAPI PFNGLISSHADERPROC glad_glIsShader; +#define glIsShader glad_glIsShader +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program); +GLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram; +#define glLinkProgram glad_glLinkProgram +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource; +#define glShaderSource glad_glShaderSource +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program); +GLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram; +#define glUseProgram glad_glUseProgram +typedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); +GLAPI PFNGLUNIFORM1FPROC glad_glUniform1f; +#define glUniform1f glad_glUniform1f +typedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); +GLAPI PFNGLUNIFORM2FPROC glad_glUniform2f; +#define glUniform2f glad_glUniform2f +typedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI PFNGLUNIFORM3FPROC glad_glUniform3f; +#define glUniform3f glad_glUniform3f +typedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI PFNGLUNIFORM4FPROC glad_glUniform4f; +#define glUniform4f glad_glUniform4f +typedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0); +GLAPI PFNGLUNIFORM1IPROC glad_glUniform1i; +#define glUniform1i glad_glUniform1i +typedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); +GLAPI PFNGLUNIFORM2IPROC glad_glUniform2i; +#define glUniform2i glad_glUniform2i +typedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); +GLAPI PFNGLUNIFORM3IPROC glad_glUniform3i; +#define glUniform3i glad_glUniform3i +typedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI PFNGLUNIFORM4IPROC glad_glUniform4i; +#define glUniform4i glad_glUniform4i +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv; +#define glUniform1fv glad_glUniform1fv +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv; +#define glUniform2fv glad_glUniform2fv +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv; +#define glUniform3fv glad_glUniform3fv +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value); +GLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv; +#define glUniform4fv glad_glUniform4fv +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv; +#define glUniform1iv glad_glUniform1iv +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv; +#define glUniform2iv glad_glUniform2iv +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv; +#define glUniform3iv glad_glUniform3iv +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value); +GLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv; +#define glUniform4iv glad_glUniform4iv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; +#define glUniformMatrix2fv glad_glUniformMatrix2fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; +#define glUniformMatrix3fv glad_glUniformMatrix3fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; +#define glUniformMatrix4fv glad_glUniformMatrix4fv +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program); +GLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; +#define glValidateProgram glad_glValidateProgram +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); +GLAPI PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; +#define glVertexAttrib1d glad_glVertexAttrib1d +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; +#define glVertexAttrib1dv glad_glVertexAttrib1dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); +GLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; +#define glVertexAttrib1f glad_glVertexAttrib1f +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; +#define glVertexAttrib1fv glad_glVertexAttrib1fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); +GLAPI PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; +#define glVertexAttrib1s glad_glVertexAttrib1s +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; +#define glVertexAttrib1sv glad_glVertexAttrib1sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); +GLAPI PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; +#define glVertexAttrib2d glad_glVertexAttrib2d +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; +#define glVertexAttrib2dv glad_glVertexAttrib2dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); +GLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; +#define glVertexAttrib2f glad_glVertexAttrib2f +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; +#define glVertexAttrib2fv glad_glVertexAttrib2fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); +GLAPI PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; +#define glVertexAttrib2s glad_glVertexAttrib2s +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; +#define glVertexAttrib2sv glad_glVertexAttrib2sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; +#define glVertexAttrib3d glad_glVertexAttrib3d +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; +#define glVertexAttrib3dv glad_glVertexAttrib3dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; +#define glVertexAttrib3f glad_glVertexAttrib3f +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; +#define glVertexAttrib3fv glad_glVertexAttrib3fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; +#define glVertexAttrib3s glad_glVertexAttrib3s +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; +#define glVertexAttrib3sv glad_glVertexAttrib3sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v); +GLAPI PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; +#define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; +#define glVertexAttrib4Niv glad_glVertexAttrib4Niv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; +#define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; +#define glVertexAttrib4Nub glad_glVertexAttrib4Nub +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v); +GLAPI PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; +#define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; +#define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v); +GLAPI PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; +#define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v); +GLAPI PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; +#define glVertexAttrib4bv glad_glVertexAttrib4bv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; +#define glVertexAttrib4d glad_glVertexAttrib4d +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v); +GLAPI PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; +#define glVertexAttrib4dv glad_glVertexAttrib4dv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; +#define glVertexAttrib4f glad_glVertexAttrib4f +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v); +GLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; +#define glVertexAttrib4fv glad_glVertexAttrib4fv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; +#define glVertexAttrib4iv glad_glVertexAttrib4iv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; +#define glVertexAttrib4s glad_glVertexAttrib4s +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; +#define glVertexAttrib4sv glad_glVertexAttrib4sv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v); +GLAPI PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; +#define glVertexAttrib4ubv glad_glVertexAttrib4ubv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; +#define glVertexAttrib4uiv glad_glVertexAttrib4uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v); +GLAPI PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; +#define glVertexAttrib4usv glad_glVertexAttrib4usv +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +GLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; +#define glVertexAttribPointer glad_glVertexAttribPointer +#endif +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +GLAPI int GLAD_GL_VERSION_2_1; +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; +#define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; +#define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; +#define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; +#define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; +#define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; +#define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv +#endif +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 +GLAPI int GLAD_GL_VERSION_3_0; +typedef void (APIENTRYP PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI PFNGLCOLORMASKIPROC glad_glColorMaski; +#define glColorMaski glad_glColorMaski +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean *data); +GLAPI PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; +#define glGetBooleani_v glad_glGetBooleani_v +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint *data); +GLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; +#define glGetIntegeri_v glad_glGetIntegeri_v +typedef void (APIENTRYP PFNGLENABLEIPROC)(GLenum target, GLuint index); +GLAPI PFNGLENABLEIPROC glad_glEnablei; +#define glEnablei glad_glEnablei +typedef void (APIENTRYP PFNGLDISABLEIPROC)(GLenum target, GLuint index); +GLAPI PFNGLDISABLEIPROC glad_glDisablei; +#define glDisablei glad_glDisablei +typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC)(GLenum target, GLuint index); +GLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi; +#define glIsEnabledi glad_glIsEnabledi +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); +GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; +#define glBeginTransformFeedback glad_glBeginTransformFeedback +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void); +GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; +#define glEndTransformFeedback glad_glEndTransformFeedback +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; +#define glBindBufferRange glad_glBindBufferRange +typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); +GLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; +#define glBindBufferBase glad_glBindBufferBase +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; +#define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; +#define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying +typedef void (APIENTRYP PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); +GLAPI PFNGLCLAMPCOLORPROC glad_glClampColor; +#define glClampColor glad_glClampColor +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); +GLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; +#define glBeginConditionalRender glad_glBeginConditionalRender +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(void); +GLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; +#define glEndConditionalRender glad_glEndConditionalRender +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; +#define glVertexAttribIPointer glad_glVertexAttribIPointer +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint *params); +GLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; +#define glGetVertexAttribIiv glad_glGetVertexAttribIiv +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint *params); +GLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; +#define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); +GLAPI PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; +#define glVertexAttribI1i glad_glVertexAttribI1i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); +GLAPI PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; +#define glVertexAttribI2i glad_glVertexAttribI2i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); +GLAPI PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; +#define glVertexAttribI3i glad_glVertexAttribI3i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; +#define glVertexAttribI4i glad_glVertexAttribI4i +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); +GLAPI PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; +#define glVertexAttribI1ui glad_glVertexAttribI1ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); +GLAPI PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; +#define glVertexAttribI2ui glad_glVertexAttribI2ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; +#define glVertexAttribI3ui glad_glVertexAttribI3ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; +#define glVertexAttribI4ui glad_glVertexAttribI4ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; +#define glVertexAttribI1iv glad_glVertexAttribI1iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; +#define glVertexAttribI2iv glad_glVertexAttribI2iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; +#define glVertexAttribI3iv glad_glVertexAttribI3iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint *v); +GLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; +#define glVertexAttribI4iv glad_glVertexAttribI4iv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; +#define glVertexAttribI1uiv glad_glVertexAttribI1uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; +#define glVertexAttribI2uiv glad_glVertexAttribI2uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; +#define glVertexAttribI3uiv glad_glVertexAttribI3uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint *v); +GLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; +#define glVertexAttribI4uiv glad_glVertexAttribI4uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte *v); +GLAPI PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; +#define glVertexAttribI4bv glad_glVertexAttribI4bv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort *v); +GLAPI PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; +#define glVertexAttribI4sv glad_glVertexAttribI4sv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte *v); +GLAPI PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; +#define glVertexAttribI4ubv glad_glVertexAttribI4ubv +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort *v); +GLAPI PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; +#define glVertexAttribI4usv glad_glVertexAttribI4usv +typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint *params); +GLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; +#define glGetUniformuiv glad_glGetUniformuiv +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar *name); +GLAPI PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; +#define glBindFragDataLocation glad_glBindFragDataLocation +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar *name); +GLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; +#define glGetFragDataLocation glad_glGetFragDataLocation +typedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); +GLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui; +#define glUniform1ui glad_glUniform1ui +typedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); +GLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui; +#define glUniform2ui glad_glUniform2ui +typedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui; +#define glUniform3ui glad_glUniform3ui +typedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui; +#define glUniform4ui glad_glUniform4ui +typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; +#define glUniform1uiv glad_glUniform1uiv +typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; +#define glUniform2uiv glad_glUniform2uiv +typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; +#define glUniform3uiv glad_glUniform3uiv +typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint *value); +GLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; +#define glUniform4uiv glad_glUniform4uiv +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint *params); +GLAPI PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; +#define glTexParameterIiv glad_glTexParameterIiv +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint *params); +GLAPI PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; +#define glTexParameterIuiv glad_glTexParameterIuiv +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; +#define glGetTexParameterIiv glad_glGetTexParameterIiv +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint *params); +GLAPI PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; +#define glGetTexParameterIuiv glad_glGetTexParameterIuiv +typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; +#define glClearBufferiv glad_glClearBufferiv +typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; +#define glClearBufferuiv glad_glClearBufferuiv +typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; +#define glClearBufferfv glad_glClearBufferfv +typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; +#define glClearBufferfi glad_glClearBufferfi +typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); +GLAPI PFNGLGETSTRINGIPROC glad_glGetStringi; +#define glGetStringi glad_glGetStringi +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); +GLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; +#define glIsRenderbuffer glad_glIsRenderbuffer +typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); +GLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; +#define glBindRenderbuffer glad_glBindRenderbuffer +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers); +GLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; +#define glDeleteRenderbuffers glad_glDeleteRenderbuffers +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); +GLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; +#define glGenRenderbuffers glad_glGenRenderbuffers +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; +#define glRenderbufferStorage glad_glRenderbufferStorage +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); +GLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; +#define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); +GLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; +#define glIsFramebuffer glad_glIsFramebuffer +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); +GLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; +#define glBindFramebuffer glad_glBindFramebuffer +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers); +GLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; +#define glDeleteFramebuffers glad_glDeleteFramebuffers +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); +GLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; +#define glGenFramebuffers glad_glGenFramebuffers +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); +GLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; +#define glCheckFramebufferStatus glad_glCheckFramebufferStatus +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; +#define glFramebufferTexture1D glad_glFramebufferTexture1D +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; +#define glFramebufferTexture2D glad_glFramebufferTexture2D +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; +#define glFramebufferTexture3D glad_glFramebufferTexture3D +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; +#define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; +#define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv +typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target); +GLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; +#define glGenerateMipmap glad_glGenerateMipmap +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; +#define glBlitFramebuffer glad_glBlitFramebuffer +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; +#define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; +#define glFramebufferTextureLayer glad_glFramebufferTextureLayer +typedef void * (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; +#define glMapBufferRange glad_glMapBufferRange +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); +GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; +#define glFlushMappedBufferRange glad_glFlushMappedBufferRange +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array); +GLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; +#define glBindVertexArray glad_glBindVertexArray +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint *arrays); +GLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; +#define glDeleteVertexArrays glad_glDeleteVertexArrays +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); +GLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; +#define glGenVertexArrays glad_glGenVertexArrays +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array); +GLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; +#define glIsVertexArray glad_glIsVertexArray +#endif +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +GLAPI int GLAD_GL_VERSION_3_1; +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +GLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; +#define glDrawArraysInstanced glad_glDrawArraysInstanced +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +GLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; +#define glDrawElementsInstanced glad_glDrawElementsInstanced +typedef void (APIENTRYP PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); +GLAPI PFNGLTEXBUFFERPROC glad_glTexBuffer; +#define glTexBuffer glad_glTexBuffer +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); +GLAPI PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; +#define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; +#define glCopyBufferSubData glad_glCopyBufferSubData +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +GLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; +#define glGetUniformIndices glad_glGetUniformIndices +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +GLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; +#define glGetActiveUniformsiv glad_glGetActiveUniformsiv +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +GLAPI PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; +#define glGetActiveUniformName glad_glGetActiveUniformName +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar *uniformBlockName); +GLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; +#define glGetUniformBlockIndex glad_glGetUniformBlockIndex +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +GLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; +#define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +GLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; +#define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +GLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; +#define glUniformBlockBinding glad_glUniformBlockBinding +#endif +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +GLAPI int GLAD_GL_VERSION_3_2; +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; +#define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; +#define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; +#define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +GLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; +#define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC)(GLenum mode); +GLAPI PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; +#define glProvokingVertex glad_glProvokingVertex +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); +GLAPI PFNGLFENCESYNCPROC glad_glFenceSync; +#define glFenceSync glad_glFenceSync +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync); +GLAPI PFNGLISSYNCPROC glad_glIsSync; +#define glIsSync glad_glIsSync +typedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync); +GLAPI PFNGLDELETESYNCPROC glad_glDeleteSync; +#define glDeleteSync glad_glDeleteSync +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; +#define glClientWaitSync glad_glClientWaitSync +typedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI PFNGLWAITSYNCPROC glad_glWaitSync; +#define glWaitSync glad_glWaitSync +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 *data); +GLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v; +#define glGetInteger64v glad_glGetInteger64v +typedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +GLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv; +#define glGetSynciv glad_glGetSynciv +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 *data); +GLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; +#define glGetInteger64i_v glad_glGetInteger64i_v +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 *params); +GLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; +#define glGetBufferParameteri64v glad_glGetBufferParameteri64v +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; +#define glFramebufferTexture glad_glFramebufferTexture +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; +#define glTexImage2DMultisample glad_glTexImage2DMultisample +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; +#define glTexImage3DMultisample glad_glTexImage3DMultisample +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat *val); +GLAPI PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; +#define glGetMultisamplefv glad_glGetMultisamplefv +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); +GLAPI PFNGLSAMPLEMASKIPROC glad_glSampleMaski; +#define glSampleMaski glad_glSampleMaski +#endif +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +GLAPI int GLAD_GL_VERSION_3_3; +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; +#define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar *name); +GLAPI PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; +#define glGetFragDataIndex glad_glGetFragDataIndex +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint *samplers); +GLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers; +#define glGenSamplers glad_glGenSamplers +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint *samplers); +GLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; +#define glDeleteSamplers glad_glDeleteSamplers +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler); +GLAPI PFNGLISSAMPLERPROC glad_glIsSampler; +#define glIsSampler glad_glIsSampler +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); +GLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler; +#define glBindSampler glad_glBindSampler +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); +GLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; +#define glSamplerParameteri glad_glSamplerParameteri +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint *param); +GLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; +#define glSamplerParameteriv glad_glSamplerParameteriv +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); +GLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; +#define glSamplerParameterf glad_glSamplerParameterf +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat *param); +GLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; +#define glSamplerParameterfv glad_glSamplerParameterfv +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint *param); +GLAPI PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; +#define glSamplerParameterIiv glad_glSamplerParameterIiv +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint *param); +GLAPI PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; +#define glSamplerParameterIuiv glad_glSamplerParameterIuiv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint *params); +GLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; +#define glGetSamplerParameteriv glad_glGetSamplerParameteriv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint *params); +GLAPI PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; +#define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat *params); +GLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; +#define glGetSamplerParameterfv glad_glGetSamplerParameterfv +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint *params); +GLAPI PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; +#define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); +GLAPI PFNGLQUERYCOUNTERPROC glad_glQueryCounter; +#define glQueryCounter glad_glQueryCounter +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 *params); +GLAPI PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; +#define glGetQueryObjecti64v glad_glGetQueryObjecti64v +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 *params); +GLAPI PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; +#define glGetQueryObjectui64v glad_glGetQueryObjectui64v +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); +GLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; +#define glVertexAttribDivisor glad_glVertexAttribDivisor +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; +#define glVertexAttribP1ui glad_glVertexAttribP1ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; +#define glVertexAttribP1uiv glad_glVertexAttribP1uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; +#define glVertexAttribP2ui glad_glVertexAttribP2ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; +#define glVertexAttribP2uiv glad_glVertexAttribP2uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; +#define glVertexAttribP3ui glad_glVertexAttribP3ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; +#define glVertexAttribP3uiv glad_glVertexAttribP3uiv +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; +#define glVertexAttribP4ui glad_glVertexAttribP4ui +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; +#define glVertexAttribP4uiv glad_glVertexAttribP4uiv +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); +GLAPI PFNGLVERTEXP2UIPROC glad_glVertexP2ui; +#define glVertexP2ui glad_glVertexP2ui +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint *value); +GLAPI PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; +#define glVertexP2uiv glad_glVertexP2uiv +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); +GLAPI PFNGLVERTEXP3UIPROC glad_glVertexP3ui; +#define glVertexP3ui glad_glVertexP3ui +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint *value); +GLAPI PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; +#define glVertexP3uiv glad_glVertexP3uiv +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); +GLAPI PFNGLVERTEXP4UIPROC glad_glVertexP4ui; +#define glVertexP4ui glad_glVertexP4ui +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint *value); +GLAPI PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; +#define glVertexP4uiv glad_glVertexP4uiv +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; +#define glTexCoordP1ui glad_glTexCoordP1ui +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint *coords); +GLAPI PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; +#define glTexCoordP1uiv glad_glTexCoordP1uiv +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; +#define glTexCoordP2ui glad_glTexCoordP2ui +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint *coords); +GLAPI PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; +#define glTexCoordP2uiv glad_glTexCoordP2uiv +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; +#define glTexCoordP3ui glad_glTexCoordP3ui +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint *coords); +GLAPI PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; +#define glTexCoordP3uiv glad_glTexCoordP3uiv +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; +#define glTexCoordP4ui glad_glTexCoordP4ui +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint *coords); +GLAPI PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; +#define glTexCoordP4uiv glad_glTexCoordP4uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; +#define glMultiTexCoordP1ui glad_glMultiTexCoordP1ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); +GLAPI PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; +#define glMultiTexCoordP1uiv glad_glMultiTexCoordP1uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; +#define glMultiTexCoordP2ui glad_glMultiTexCoordP2ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); +GLAPI PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; +#define glMultiTexCoordP2uiv glad_glMultiTexCoordP2uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; +#define glMultiTexCoordP3ui glad_glMultiTexCoordP3ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); +GLAPI PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; +#define glMultiTexCoordP3uiv glad_glMultiTexCoordP3uiv +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); +GLAPI PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; +#define glMultiTexCoordP4ui glad_glMultiTexCoordP4ui +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); +GLAPI PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; +#define glMultiTexCoordP4uiv glad_glMultiTexCoordP4uiv +typedef void (APIENTRYP PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); +GLAPI PFNGLNORMALP3UIPROC glad_glNormalP3ui; +#define glNormalP3ui glad_glNormalP3ui +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint *coords); +GLAPI PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; +#define glNormalP3uiv glad_glNormalP3uiv +typedef void (APIENTRYP PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); +GLAPI PFNGLCOLORP3UIPROC glad_glColorP3ui; +#define glColorP3ui glad_glColorP3ui +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint *color); +GLAPI PFNGLCOLORP3UIVPROC glad_glColorP3uiv; +#define glColorP3uiv glad_glColorP3uiv +typedef void (APIENTRYP PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); +GLAPI PFNGLCOLORP4UIPROC glad_glColorP4ui; +#define glColorP4ui glad_glColorP4ui +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint *color); +GLAPI PFNGLCOLORP4UIVPROC glad_glColorP4uiv; +#define glColorP4uiv glad_glColorP4uiv +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); +GLAPI PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; +#define glSecondaryColorP3ui glad_glSecondaryColorP3ui +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint *color); +GLAPI PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; +#define glSecondaryColorP3uiv glad_glSecondaryColorP3uiv +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/18-depth-testing/src/json.hpp b/18-depth-testing/src/json.hpp new file mode 100644 index 0000000..02d0eb7 --- /dev/null +++ b/18-depth-testing/src/json.hpp @@ -0,0 +1,59 @@ +#pragma once +#include +#include +#include +#include +#include + +#define ENROLL_COMPONENT(COMPONENT, ...) \ + NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(COMPONENT, __VA_ARGS__); \ + template <> struct NameOf { \ + static constexpr const char *name = #COMPONENT; \ + }; + +// partial specialization (full specialization works too) +namespace nlohmann { + + template <> + struct adl_serializer { + static void to_json(json& j, const glm::vec3& opt) { + + } + + static void from_json(const json& j, glm::vec3& opt) { + opt = glm::vec3(j[0], j[1], j[2]); + } + }; + + template + struct adl_serializer> { + static void to_json(json& j, const std::optional& opt) { + if (opt == std::nullopt) { + j = nullptr; + } else { + j = *opt; // this will call adl_serializer::to_json which will + // find the free function to_json in T's namespace! + } + } + + static void from_json(const json& j, std::optional& opt) { + if (j.is_null() || j == false) { + opt = std::nullopt; + } else { + opt = std::make_optional(j.template get()); + // same as above, but with adl_serializer::from_json + } + } + }; + + template<> + struct adl_serializer { + static void to_json(json& j, const std::chrono::milliseconds& opt) { + j = opt.count(); + } + + static void from_json(const json& j, std::chrono::milliseconds& opt) { + opt = std::chrono::milliseconds{int(j)}; + } + }; +} diff --git a/18-depth-testing/src/main.cpp b/18-depth-testing/src/main.cpp new file mode 100644 index 0000000..cf5ee51 --- /dev/null +++ b/18-depth-testing/src/main.cpp @@ -0,0 +1,126 @@ +#define _USE_MATH_DEFINES +#include +#include "scene.hpp" +#include "utils.hpp" +void framebuffer_size_callback(GLFWwindow *window, int width, int height); + +void init_glfw() { + glfwInit(); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); +} + +void framebuffer_size_callback(GLFWwindow *, int width, int height) { + glViewport(0, 0, width, height); +} + +void mouse_callback(GLFWwindow *window, double xpos, double ypos) { + Scene* scene = static_cast(glfwGetWindowUserPointer(window)); + scene->camera.mouse_move(xpos, ypos); +} + +void scroll_callback(GLFWwindow *window, double xoffset, double yoffset) { + Scene* scene = static_cast(glfwGetWindowUserPointer(window)); + scene->camera.mouse_scroll(xoffset, yoffset); +} + +GLFWwindow* create_window() { + GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL); + dbc::check(window != NULL, "failed to open window"); + + glfwMakeContextCurrent(window); + + glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); + + auto good = gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); + dbc::check(good, "failed to load GLAD"); + + glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); + glfwSetCursorPosCallback(window, mouse_callback); + glfwSetScrollCallback(window, scroll_callback); + + return window; +} + + +void process_input(GLFWwindow *window, Scene& scene) { + if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { + glfwSetWindowShouldClose(window, true); + } + + if(glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS) { + scene.camera.forward(); + } + + if(glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS) { + scene.camera.back(); + } + + if(glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS) { + scene.camera.left(); + } + + if(glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) { + scene.camera.right(); + } + + if(glfwGetKey(window, GLFW_KEY_M) == GLFW_PRESS) { + scene.spawn("popcorn", scene.camera.position); + } + + if(glfwGetKey(window, GLFW_KEY_L) == GLFW_PRESS) { + for(auto& light : scene.light.directional) { + light.adjust(-0.01f); + } + } + + if(glfwGetKey(window, GLFW_KEY_P) == GLFW_PRESS) { + for(auto& light : scene.light.directional) { + light.adjust(0.01f); + } + } +} + +Scene setup() { + glEnable(GL_DEPTH_TEST); + + components::Scene config = utils::load_scene_config("config.json"); + Scene scene(config); + + return scene; +} + +void update(GLFWwindow* window, Scene& scene) { + glfwPollEvents(); + process_input(window, scene); + scene.update(); +} + +void render(GLFWwindow* window, Scene& scene) { + scene.render(window); + glfwSwapBuffers(window); +} + +void quit(GLFWwindow* window, Scene& scene) { + scene.cleanup(); + glfwTerminate(); +} + +int main() { + init_glfw(); + + auto window = create_window(); + auto scene = setup(); + + glfwSetWindowUserPointer(window, &scene); + + while(!glfwWindowShouldClose(window)) { + update(window, scene); + render(window, scene); + } + + quit(window, scene); + + return 0; +} diff --git a/18-depth-testing/src/mesh.cpp b/18-depth-testing/src/mesh.cpp new file mode 100644 index 0000000..5c40960 --- /dev/null +++ b/18-depth-testing/src/mesh.cpp @@ -0,0 +1,48 @@ +#include "mesh.hpp" +#include "dbc.hpp" + +void Mesh::draw(Shader &shader) { + // CAN WE DO THIS LESS OFTEN OUTSIDE DRAWING? + apply_textures(shader); + + glBindVertexArray(VAO); + glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0); + glBindVertexArray(0); + glActiveTexture(GL_TEXTURE0); +} + +void Mesh::apply_textures(const Shader& shader) { + for(unsigned int i = 0; i < textures.size(); i++) { + Texture& texture = textures[i]; + + texture.uniform_id = glGetUniformLocation(shader.ID, texture.target.c_str()); + glActiveTexture(GL_TEXTURE0 + i); + + // move this to setup_mesh + glUniform1i(texture.uniform_id, i); + glBindTexture(GL_TEXTURE_2D, texture.id); + } +} + +void Mesh::setup_mesh() { + glGenVertexArrays(1, &VAO); + glGenBuffers(1, &VBO); + glGenBuffers(1, &EBO); + + glBindVertexArray(VAO); + glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(Vertex), vertices.data(), GL_STATIC_DRAW); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), indices.data(), GL_STATIC_DRAW); + + // this matches the locations in the vertex shader + glEnableVertexAttribArray(0); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, position)); + + glEnableVertexAttribArray(1); + glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, normal)); + + glEnableVertexAttribArray(2); + glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, tex_coords)); +} diff --git a/18-depth-testing/src/mesh.hpp b/18-depth-testing/src/mesh.hpp new file mode 100644 index 0000000..21160e7 --- /dev/null +++ b/18-depth-testing/src/mesh.hpp @@ -0,0 +1,72 @@ +#pragma once + +#include +#include +#include + +#include "shader.hpp" + +#include +#include + +struct Vertex { + glm::vec3 position; + glm::vec3 normal; + glm::vec2 tex_coords; +}; + +struct TextureCounts { + unsigned int diffuseNr = 1; + unsigned int specularNr = 1; + unsigned int normalNr = 1; + unsigned int heightNr = 1; +}; + +struct Texture { + unsigned int id; + std::string type; + std::string path; + std::string target; + int uniform_id=-1; + + Texture(unsigned int id, const std::string& type, const std::string& path, TextureCounts& count) : + id(id), type(type) + { + unsigned int number = 0; + + if(type == "texture_diffuse") { + number = count.diffuseNr++; + } else if(type == "texture_specular") { + number = count.specularNr++; + } else if(type == "texture_normal") { + number = count.normalNr++; + } else if(type == "texture_height") { + number = count.heightNr++; + } else { + dbc::sentinel($F("Invalid texture type={} for file={}", type, path)); + } + + target = std::format("{}{}", type, number); + } +}; + +struct Mesh { + std::vector vertices; + std::vector indices; + std::vector textures; + unsigned int VAO = 0; + unsigned int VBO = 0; + unsigned int EBO = 0; + + Mesh(std::vector& vertices, std::vector& indices, std::vector& textures) : + vertices(vertices), + indices(indices), + textures(textures) + { + setup_mesh(); + } + + void draw(Shader &shader); + void setup_mesh(); + void apply_textures(const Shader& shader); +}; diff --git a/18-depth-testing/src/model.cpp b/18-depth-testing/src/model.cpp new file mode 100644 index 0000000..0c9f55c --- /dev/null +++ b/18-depth-testing/src/model.cpp @@ -0,0 +1,211 @@ +#include "model.hpp" +#include "dbc.hpp" +#include + +unsigned int texture_from_file(const std::string& directory, const std::string& path); +unsigned int texture_from_internal(const aiScene *scene, size_t index); + +unsigned int image_to_texture(unsigned char *data, int width, int height, int nrComponents) { + unsigned int textureID; + glGenTextures(1, &textureID); + + GLenum format = GL_RGB; + + switch(nrComponents) { + case 1: + format = GL_RED; + break; + case 3: + format = GL_RGB; + break; + case 4: + format = GL_RGBA; + break; + default: + dbc::sentinel($F("Impossible nrComponents={} when loading image", nrComponents)); + } + + glBindTexture(GL_TEXTURE_2D, textureID); + glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data); + glGenerateMipmap(GL_TEXTURE_2D); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + return textureID; +} + +unsigned int texture_from_internal(const aiScene *scene, size_t index) { + const aiTexture *aiTex = scene->mTextures[index]; + unsigned int textureID = 0; + int width = 0; + int height = 0; + int nrComponents = 0; + unsigned char *data = nullptr; + const unsigned char* dataBytes = (const unsigned char*)aiTex->pcData; + + if(aiTex->mHeight == 0) { + // compressed texture (PNG or JPG) + size_t dataSize = aiTex->mWidth; + data = stbi_load_from_memory(dataBytes, dataSize, &width, &height, &nrComponents, 0); + textureID = image_to_texture(data, width, height, nrComponents); + stbi_image_free(data); + } else { + data = (unsigned char*)aiTex->pcData; + width = aiTex->mWidth; + height = aiTex->mHeight; + nrComponents = 4; // either BGRA8888 or RGBA8888 + textureID = image_to_texture(data, width, height, nrComponents); + } + + return textureID; +} + +unsigned int texture_from_file(const std::string& directory, const std::string& path) +{ + std::string filename = directory + "/" + path; + + int width = 0; + int height = 0; + int nrComponents = 0; + + unsigned char *data = stbi_load(filename.c_str(), &width, &height, &nrComponents, 0); + dbc::check(data != nullptr, $F("Failed to load texture {}", filename)); + + unsigned int textureID = image_to_texture(data, width, height, nrComponents); + + stbi_image_free(data); + + return textureID; +} + +void Model::draw(Shader &shader) { + for(auto& mesh : meshes) { + mesh.draw(shader); + } +} + +void Model::load_model() { + std::string path = directory + "/" + model_path; + + Assimp::Importer importer; + + const aiScene* scene = importer.ReadFile(path, + aiProcess_Triangulate | + aiProcess_GenSmoothNormals | + aiProcess_FlipUVs | + aiProcess_CalcTangentSpace); + + dbc::check(scene != nullptr, "Assimp ReadFile return null"); + dbc::check(!(scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE), "Assimp says incomplete."); + dbc::check(scene->mRootNode != nullptr, "Assimp loaded scene doesn't have a root node"); + + process_node(scene, scene->mRootNode); +} + +void Model::process_node(const aiScene *scene, aiNode *node) { + for(unsigned int i = 0; i < node->mNumMeshes; i++) { + aiMesh* mesh = scene->mMeshes[node->mMeshes[i]]; + meshes.push_back(process_mesh(scene, mesh)); + } + + for(unsigned int i = 0; i < node->mNumChildren; i++) { + process_node(scene, node->mChildren[i]); + } +} + +Mesh Model::process_mesh(const aiScene *scene, aiMesh *mesh) { + std::vector vertices; + std::vector indices; + std::vector textures; + + for(unsigned int i = 0; i < mesh->mNumVertices; i++) { + glm::vec3 position{ + mesh->mVertices[i].x, + mesh->mVertices[i].y, + mesh->mVertices[i].z}; + + glm::vec3 normal{}; + glm::vec2 tex_coords{0.0f, 0.0f}; + + if(mesh->HasNormals()) { + normal = glm::vec3( + mesh->mNormals[i].x, + mesh->mNormals[i].y, + mesh->mNormals[i].z); + } + + if(mesh->mTextureCoords[0]) { + tex_coords = glm::vec2( + mesh->mTextureCoords[0][i].x, + mesh->mTextureCoords[0][i].y + ); + } + + vertices.emplace_back(position, normal, tex_coords); + } + + for(unsigned int i = 0; i < mesh->mNumFaces; i++) { + aiFace& face = mesh->mFaces[i]; + + for(unsigned int j = 0; j < face.mNumIndices; j++) { + indices.emplace_back(face.mIndices[j]); + } + } + + aiMaterial* material = scene->mMaterials[mesh->mMaterialIndex]; + + // we assume a convention for sampler names in the shaders. Each diffuse texture should be named + // as 'texture_diffuseN' where N is a sequential number ranging from 1 to MAX_SAMPLER_NUMBER. + // Same applies to other texture as the following list summarizes: + // diffuse: texture_diffuseN + // specular: texture_specularN + // normal: texture_normalN + + // 1. diffuse maps + load_material_textures(scene, textures, material, aiTextureType_DIFFUSE, "texture_diffuse"); + + // 2. specular maps + load_material_textures(scene, textures, material, aiTextureType_SPECULAR, "texture_specular"); + + // 3. normal maps + load_material_textures(scene, textures, material, aiTextureType_HEIGHT, "texture_normal"); + + // 4. height maps + load_material_textures(scene, textures, material, aiTextureType_AMBIENT, "texture_height"); + + return Mesh(vertices, indices, textures); +} + +void Model::load_material_textures(const aiScene *scene, std::vector& textures, aiMaterial *mat, aiTextureType type, std::string type_name) +{ + for(unsigned int i = 0; i < mat->GetTextureCount(type); i++) { + aiString str; + + mat->GetTexture(type, i, &str); + std::string tx_path{str.C_Str()}; + dbc::check(!tx_path.empty(), "Texture has empty path, should be impossible?"); + + if(textures_loaded.contains(tx_path)) { + textures.push_back(textures_loaded.at(tx_path)); + } else { + unsigned int tx_id = 0; + + // if it's a *# style path then it's internal + if(tx_path[0] == '*') { + // get the texture from the internal version + tx_id = texture_from_internal(scene, std::stoi(tx_path.substr(1))); + } else { + // else get it from a file + tx_id = texture_from_file(directory, tx_path); + } + + // dubious code here, but seems to be right + auto& result = textures.emplace_back(tx_id, type_name, tx_path, texture_counts); + + textures_loaded.try_emplace(tx_path, result); + } + } +} diff --git a/18-depth-testing/src/model.hpp b/18-depth-testing/src/model.hpp new file mode 100644 index 0000000..5029439 --- /dev/null +++ b/18-depth-testing/src/model.hpp @@ -0,0 +1,42 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +struct Model { + std::string directory; + std::string model_path; + std::map textures_loaded; + std::vector meshes; + TextureCounts texture_counts; + bool gammaCorrection; + + Model(const std::string& directory, const std::string& model_path) : + directory(directory), model_path(model_path) + { + load_model(); + } + + void draw(Shader &shader); + + void load_model(); + void process_node(const aiScene *scene, aiNode *node); + Mesh process_mesh(const aiScene *scene, aiMesh *mesh); + + void load_material_textures(const aiScene *scene, std::vector& textures, aiMaterial *mat, aiTextureType type, std::string typeName); +}; diff --git a/18-depth-testing/src/scene.cpp b/18-depth-testing/src/scene.cpp new file mode 100644 index 0000000..d02f505 --- /dev/null +++ b/18-depth-testing/src/scene.cpp @@ -0,0 +1,71 @@ +#include "scene.hpp" +#include "dbc.hpp" +#include + +void Scene::update() { + float currentFrame = glfwGetTime(); + deltaTime = currentFrame - lastFrame; + lastFrame = currentFrame; + + camera.update(deltaTime); +} + +void Scene::draw_model(Model& scene_model, Material& material, glm::mat4& projection, glm::mat4& view, glm::vec3& position) +{ + shader.apply_material(material); + + float time = glfwGetTime(); + glm::mat4 model = glm::mat4(1.0f); + model = glm::translate(model, position); + model = glm::rotate(model, glm::radians(time * 10.0f), glm::vec3(1.0f, 0.3f, 0.5f)); + + shader.setMat4("model", model); + + scene_model.draw(shader); +} + +void Scene::render(GLFWwindow* window) { + glClearColor(0.1f, 0.1f, 0.1f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + shader.use(); + + // time is used for fake 3d rotation + float time = glfwGetTime(); + + glm::mat4 view = camera.look_at(); + glm::mat4 projection = glm::mat4(1.0f); + + // fov, aspect, near plane, far plane + projection = glm::perspective(glm::radians(camera.fov), (float)SCR_WIDTH / (float)SCR_HEIGHT, 0.1f, 100.0f); + + shader.use(); + shader.setMat4("view", view); + shader.setMat4("projection", projection); + shader.setVec3("viewPos", camera.position); + + // for now just detect the camera moved and do spotlight update + if(camera.dirty) { + light.camera.position = camera.position; + light.camera.direction = camera.front; + // just update the camera's light + shader.apply_spot_light(light.camera, 0); + camera.dirty = false; + } + + // BUG: no connection between models and positions + for(auto& thing : things) { + draw_model(thing.model, thing.material, projection, view, thing.position); + } +} + +void Scene::cleanup() { + shader.cleanup(); +} + +void Scene::spawn(const std::string& name, components::Position& position) { + things.emplace_back( + models.at(name), + position, + materials.at(name)); +} diff --git a/18-depth-testing/src/scene.hpp b/18-depth-testing/src/scene.hpp new file mode 100644 index 0000000..96f9443 --- /dev/null +++ b/18-depth-testing/src/scene.hpp @@ -0,0 +1,67 @@ +#pragma once + +#include +#include +#include +#include +#include +#include "shader.hpp" +#include "model.hpp" +#include "shader.hpp" +#include "model.hpp" +#include "camera.hpp" +#include "components.hpp" +#include + +struct Thing { + Model& model; + components::Position position; + Material& material; +}; + +struct Scene { + Shader shader; + Shader light_shader; + std::map materials; + Camera camera; + components::Lighting light; + std::map models; + std::vector things; + + float deltaTime = 0.0f; + float lastFrame = 0.0f; + + Scene(components::Scene& config): + shader{config.shader.vertex_path, config.shader.frag_path}, + light_shader{config.light_shader.vertex_path, config.shader.frag_path}, + materials{config.materials}, + camera{ + .position=config.camera.position, + .front=config.camera.front, + .up=config.camera.up, + .direction=config.camera.direction, + .movement_speed=config.camera.movement_speed, + }, + light{config.light} + { + for(auto& [name, model] : config.models) { + models.try_emplace(name, model.directory, model.model_path); + } + + for(auto& thing : config.things) { + things.emplace_back( + models.at(thing.model), + thing.position, + materials.at(thing.material)); + } + + shader.use(); + shader.apply_lighting(light); + } + + void update(); + void draw_model(Model& scene_model, Material& material, glm::mat4& projection, glm::mat4& view, glm::vec3& position); + void render(GLFWwindow* window); + void cleanup(); + void spawn(const std::string& name, components::Position& position); +}; diff --git a/18-depth-testing/src/shader.cpp b/18-depth-testing/src/shader.cpp new file mode 100644 index 0000000..a0d86ef --- /dev/null +++ b/18-depth-testing/src/shader.cpp @@ -0,0 +1,196 @@ +#include "shader.hpp" +#include +#include +#include +#include +#include +#include "dbc.hpp" +#include +#include +#include + +namespace fs = std::filesystem; + +inline std::string read_file(const std::string& filename) { + // load the file + std::ifstream in_file{filename, std::ios::binary}; + + // get the size of the file + std::stringstream in_str; + in_str << in_file.rdbuf(); + return in_str.str(); +} + +void check_error(const std::string& what, unsigned int thing, GLenum check_type) { + int success = 0; + char infoLog[512] = {0}; + + if(check_type == GL_LINK_STATUS) { + glGetProgramiv(thing, check_type, &success); + + if(!success) { + glGetProgramInfoLog(thing, 512, NULL, infoLog); + dbc::sentinel(std::format("ERROR: Program {} compile failed: {}", what, infoLog)); + } + } else { + glGetShaderiv(thing, check_type, &success); + + if(!success) { + glGetShaderInfoLog(thing, 512, NULL, infoLog); + dbc::sentinel(std::format("ERROR: Shader {} compile failed: {}", what, infoLog)); + } + } +} + +unsigned int Shader::load_shader(const std::string& filename, GLenum shader_type) { + dbc::check(fs::exists(filename), + std::format("shader file {} does not exist", filename)); + + // create the shader + std::string shader_code = read_file(filename); + const char* shader_code_ptr = shader_code.c_str(); + + int shader_id = glCreateShader(shader_type); + glShaderSource(shader_id, 1, &shader_code_ptr, NULL); + glCompileShader(shader_id); + + check_error(filename, shader_id, GL_COMPILE_STATUS); + + // check compile error + return shader_id; +} + +Shader::Shader(const std::string& vertexPath, const std::string& fragmentPath) { + unsigned int vertex = load_shader(vertexPath, GL_VERTEX_SHADER); + unsigned int fragment = load_shader(fragmentPath, GL_FRAGMENT_SHADER); + + ID = glCreateProgram(); + glAttachShader(ID, vertex); + glAttachShader(ID, fragment); + glLinkProgram(ID); + + check_error("link", ID, GL_LINK_STATUS); + + glDeleteShader(vertex); + glDeleteShader(fragment); +} + +void Shader::use() const { + glUseProgram(ID); +} + +void Shader::cleanup() { + glDeleteProgram(ID); +} + +void Shader::setBool(const std::string &name, bool value) const { + auto uniform = glGetUniformLocation(ID, name.c_str()); + glUniform1i(uniform, (int)value); +} + +void Shader::setInt(const std::string &name, int value) const { + auto uniform = glGetUniformLocation(ID, name.c_str()); + glUniform1i(uniform, value); +} + +void Shader::setFloat(const std::string &name, float value) const { + auto uniform = glGetUniformLocation(ID, name.c_str()); + glUniform1f(uniform, value); +} + +void Shader::setVec4(const std::string &name, float v1, float v2, float v3, float v4) const { + auto uniform = glGetUniformLocation(ID, name.c_str()); + glUniform4f(uniform, v1, v2, v3, v4); +} + +void Shader::setVec4(const std::string &name, const glm::vec4& value) const +{ + auto uniform = glGetUniformLocation(ID, name.c_str()); + glUniform4fv(uniform, 1, &value[0]); +} + +void Shader::setVec3(const std::string &name, const glm::vec3& value) const +{ + auto uniform = glGetUniformLocation(ID, name.c_str()); + glUniform3fv(uniform, 1, &value[0]); +} + +void Shader::setVec3(const std::string &name, float v1, float v2, float v3) const { + auto uniform = glGetUniformLocation(ID, name.c_str()); + glUniform3f(uniform, v1, v2, v3); +} + +void Shader::setMat4(const std::string &name, const glm::mat4& mat) const { + unsigned int loc = glGetUniformLocation(ID, name.c_str()); + glUniformMatrix4fv(loc, 1, GL_FALSE, glm::value_ptr(mat)); +} + +void Shader::apply_material(const Material& material) { + setVec3("material.ambient", material.ambient); + setFloat("material.shininess", material.shininess); +} + +void Shader::apply_lighting(const Lighting& lighting) { + setInt("pointLightCount", lighting.positioned.size()); + setInt("dirLightCount", lighting.directional.size()); + + // need +1 for the camera spot light + setInt("spotLightCount", lighting.spot.size() + 1); + + for(size_t i = 0; i < lighting.directional.size(); i++) { + apply_dir_light(lighting.directional[i], i); + } + + for(size_t i = 0; i < lighting.positioned.size(); i++) { + apply_point_light(lighting.positioned[i], i); + } + + // set the first spotlight to the camera light + apply_spot_light(lighting.camera, 0); + + for(size_t i = 0; i < lighting.spot.size(); i++) { + // need to be off by one because the camera is a spot light + apply_spot_light(lighting.spot[i], i+1); + } +} + + +void Shader::apply_dir_light(const Light& light, size_t index) { + dbc::check(index < MAX_LIGHTS, "too many directional lights"); + + // nasty, this needs to go + setVec3(std::format("dirLights[{}].direction", index), light.direction); + setVec3(std::format("dirLights[{}].ambient", index), light.ambient); + setVec3(std::format("dirLights[{}].diffuse", index), light.diffuse); + setVec3(std::format("dirLights[{}].specular", index), light.specular); +} + +void Shader::apply_point_light(const Light& light, size_t index) { + dbc::check(index < MAX_LIGHTS, "too many positioned lights"); + + // disgusting, crafting a string on every render? + setVec3(std::format("pointLights[{}].position", index), light.position); + setVec3(std::format("pointLights[{}].ambient", index), light.ambient); + setVec3(std::format("pointLights[{}].diffuse", index), light.diffuse); + setVec3(std::format("pointLights[{}].specular", index), light.specular); + + setFloat(std::format("pointLights[{}].constant", index), light.constant); + setFloat(std::format("pointLights[{}].linear", index), light.linear); + setFloat(std::format("pointLights[{}].quadratic", index), light.quadratic); +} + +void Shader::apply_spot_light(const Light& light, size_t index) { + dbc::check(index < MAX_LIGHTS, "too many spot lights"); + + // find a way to not make strings all the time + setVec3(std::format("spotLights[{}].position", index), light.position); + setVec3(std::format("spotLights[{}].direction", index), light.direction); + setVec3(std::format("spotLights[{}].ambient", index), light.ambient); + setVec3(std::format("spotLights[{}].diffuse", index), light.diffuse); + setVec3(std::format("spotLights[{}].specular", index), light.specular); + setFloat(std::format("spotLights[{}].constant", index), light.constant); + setFloat(std::format("spotLights[{}].linear", index), light.linear); + setFloat(std::format("spotLights[{}].quadratic", index), light.quadratic); + setFloat(std::format("spotLights[{}].cut_off", index), glm::cos(glm::radians(light.cut_off))); + setFloat(std::format("spotLights[{}].outer_cut_off", index), glm::cos(glm::radians(light.outer_cut_off))); +} diff --git a/18-depth-testing/src/shader.hpp b/18-depth-testing/src/shader.hpp new file mode 100644 index 0000000..594dd0d --- /dev/null +++ b/18-depth-testing/src/shader.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include "dbc.hpp" +#include "components.hpp" + +using components::Material, components::Lighting, components::Light; + +class Shader +{ +public: + unsigned int ID = UINT_MAX; + + Shader(const std::string& vertexPath, const std::string& fragmentPath); + unsigned int load_shader(const std::string& filename, GLenum shader_type); + void use() const; + void setBool(const std::string &name, bool value) const; + void setInt(const std::string &name, int value) const; + void setFloat(const std::string &name, float value) const; + void setVec4(const std::string &name, float v1, float v2, float v3, float v4) const; + void setVec4(const std::string &name, const glm::vec4& value) const; + void setVec3(const std::string &name, float v1, float v2, float v3) const; + void setVec3(const std::string &name, const glm::vec3& value) const; + void setMat4(const std::string &name, const glm::mat4& what) const; + void cleanup(); + + void apply_material(const Material& material); + void apply_lighting(const Lighting& lighting); + void apply_dir_light(const Light& light, size_t index); + void apply_point_light(const Light& light, size_t index); + void apply_spot_light(const Light& light, size_t index); +}; diff --git a/18-depth-testing/src/stb_image.cpp b/18-depth-testing/src/stb_image.cpp new file mode 100644 index 0000000..9177288 --- /dev/null +++ b/18-depth-testing/src/stb_image.cpp @@ -0,0 +1,2 @@ +#define STB_IMAGE_IMPLEMENTATION +#include diff --git a/18-depth-testing/src/stb_image.h b/18-depth-testing/src/stb_image.h new file mode 100644 index 0000000..9eedabe --- /dev/null +++ b/18-depth-testing/src/stb_image.h @@ -0,0 +1,7988 @@ +/* stb_image - v2.30 - public domain image loader - http://nothings.org/stb + no warranty implied; use at your own risk + + Do this: + #define STB_IMAGE_IMPLEMENTATION + before you include this file in *one* C or C++ file to create the implementation. + + // i.e. it should look like this: + #include ... + #include ... + #include ... + #define STB_IMAGE_IMPLEMENTATION + #include "stb_image.h" + + You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. + And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free + + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib) + PNG 1/2/4/8/16-bit-per-channel + + TGA (not sure what subset, if a subset) + BMP non-1bpp, non-RLE + PSD (composited view only, no extra channels, 8/16 bit-per-channel) + + GIF (*comp always reports as 4-channel) + HDR (radiance rgbE format) + PIC (Softimage PIC) + PNM (PPM and PGM binary only) + + Animated GIF still needs a proper API, but here's one way to do it: + http://gist.github.com/urraka/685d9a6340b26b830d49 + + - decode from memory or through FILE (define STBI_NO_STDIO to remove code) + - decode from arbitrary I/O callbacks + - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) + + Full documentation under "DOCUMENTATION" below. + + +LICENSE + + See end of file for license information. + +RECENT REVISION HISTORY: + + 2.30 (2024-05-31) avoid erroneous gcc warning + 2.29 (2023-05-xx) optimizations + 2.28 (2023-01-29) many error fixes, security errors, just tons of stuff + 2.27 (2021-07-11) document stbi_info better, 16-bit PNM support, bug fixes + 2.26 (2020-07-13) many minor fixes + 2.25 (2020-02-02) fix warnings + 2.24 (2020-02-02) fix warnings; thread-local failure_reason and flip_vertically + 2.23 (2019-08-11) fix clang static analysis warning + 2.22 (2019-03-04) gif fixes, fix warnings + 2.21 (2019-02-25) fix typo in comment + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs + 2.19 (2018-02-11) fix warning + 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) bugfix, 1-bit BMP, 16-bitness query, fix warnings + 2.16 (2017-07-23) all functions have 16-bit variants; optimizations; bugfixes + 2.15 (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE detection on GCC + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-12-04) experimental 16-bit API, only for PNG so far; fixes + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 + RGB-format JPEG; remove white matting in PSD; + allocate large structures on the stack; + correct channel count for PNG & BMP + 2.10 (2016-01-22) avoid warning introduced in 2.09 + 2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED + + See end of file for full revision history. + + + ============================ Contributors ========================= + + Image formats Extensions, features + Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) + Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) + Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) + Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) + Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) + Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) + Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) + github:urraka (animated gif) Junggon Kim (PNM comments) + Christopher Forseth (animated gif) Daniel Gibson (16-bit TGA) + socks-the-fox (16-bit PNG) + Jeremy Sawicki (handle all ImageNet JPGs) + Optimizations & bugfixes Mikhail Morozov (1-bit BMP) + Fabian "ryg" Giesen Anael Seghezzi (is-16-bit query) + Arseny Kapoulkine Simon Breuss (16-bit PNM) + John-Mark Allen + Carmelo J Fdez-Aguera + + Bug & warning fixes + Marc LeBlanc David Woo Guillaume George Martins Mozeiko + Christpher Lloyd Jerry Jansson Joseph Thomson Blazej Dariusz Roszkowski + Phil Jordan Dave Moore Roy Eltham + Hayaki Saito Nathan Reed Won Chun + Luke Graham Johan Duparc Nick Verigakis the Horde3D community + Thomas Ruf Ronny Chevalier github:rlyeh + Janez Zemva John Bartholomew Michal Cichon github:romigrou + Jonathan Blow Ken Hamada Tero Hanninen github:svdijk + Eugene Golushkov Laurent Gomila Cort Stratton github:snagar + Aruelien Pocheville Sergio Gonzalez Thibault Reuille github:Zelex + Cass Everitt Ryamond Barbiero github:grim210 + Paul Du Bois Engin Manap Aldo Culquicondor github:sammyhw + Philipp Wiesemann Dale Weiler Oriol Ferrer Mesia github:phprus + Josh Tobin Neil Bickford Matthew Gregan github:poppolopoppo + Julian Raschke Gregory Mullen Christian Floisand github:darealshinji + Baldur Karlsson Kevin Schmidt JR Smith github:Michaelangel007 + Brad Weinberger Matvey Cherevko github:mosra + Luca Sas Alexander Veselov Zack Middleton [reserved] + Ryan C. Gordon [reserved] [reserved] + DO NOT ADD YOUR NAME HERE + + Jacko Dirks + + To add your name to the credits, pick a random blank space in the middle and fill it. + 80% of merge conflicts on stb PRs are due to people adding their name at the end + of the credits. +*/ + +#ifndef STBI_INCLUDE_STB_IMAGE_H +#define STBI_INCLUDE_STB_IMAGE_H + +// DOCUMENTATION +// +// Limitations: +// - no 12-bit-per-channel JPEG +// - no JPEGs with arithmetic coding +// - GIF always returns *comp=4 +// +// Basic usage (see HDR discussion below for HDR usage): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// // ... but 'n' will always be the number that it would have been if you said 0 +// stbi_image_free(data); +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *channels_in_file -- outputs # of image components in image file +// int desired_channels -- if non-zero, # of image components requested in result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data, or NULL on an allocation failure or if the image is +// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'desired_channels' if desired_channels is non-zero, or +// *channels_in_file otherwise. If desired_channels is non-zero, +// *channels_in_file has the number of components that _would_ have been +// output otherwise. E.g. if you set desired_channels to 4, you will always +// get RGBA output, but you can check *channels_in_file to see if it's trivially +// opaque because e.g. there were only 3 channels in the source image. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *channels_in_file will be unchanged. The function +// stbi_failure_reason() can be queried for an extremely brief, end-user +// unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS +// to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly +// more user-friendly ones. +// +// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. +// +// To query the width, height and component count of an image without having to +// decode the full file, you can use the stbi_info family of functions: +// +// int x,y,n,ok; +// ok = stbi_info(filename, &x, &y, &n); +// // returns ok=1 and sets x, y, n if image is a supported format, +// // 0 otherwise. +// +// Note that stb_image pervasively uses ints in its public API for sizes, +// including sizes of memory buffers. This is now part of the API and thus +// hard to change without causing breakage. As a result, the various image +// loaders all have certain limits on image size; these differ somewhat +// by format but generally boil down to either just under 2GB or just under +// 1GB. When the decoded image would be larger than this, stb_image decoding +// will fail. +// +// Additionally, stb_image will reject image files that have any of their +// dimensions set to a larger value than the configurable STBI_MAX_DIMENSIONS, +// which defaults to 2**24 = 16777216 pixels. Due to the above memory limit, +// the only way to have an image with such dimensions load correctly +// is for it to have a rather extreme aspect ratio. Either way, the +// assumption here is that such larger images are likely to be malformed +// or malicious. If you do need to load an image with individual dimensions +// larger than that, and it still fits in the overall size limit, you can +// #define STBI_MAX_DIMENSIONS on your own to be something larger. +// +// =========================================================================== +// +// UNICODE: +// +// If compiling for Windows and you wish to use Unicode filenames, compile +// with +// #define STBI_WINDOWS_UTF8 +// and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert +// Windows wchar_t filenames to utf8. +// +// =========================================================================== +// +// Philosophy +// +// stb libraries are designed with the following priorities: +// +// 1. easy to use +// 2. easy to maintain +// 3. good performance +// +// Sometimes I let "good performance" creep up in priority over "easy to maintain", +// and for best performance I may provide less-easy-to-use APIs that give higher +// performance, in addition to the easy-to-use ones. Nevertheless, it's important +// to keep in mind that from the standpoint of you, a client of this library, +// all you care about is #1 and #3, and stb libraries DO NOT emphasize #3 above all. +// +// Some secondary priorities arise directly from the first two, some of which +// provide more explicit reasons why performance can't be emphasized. +// +// - Portable ("ease of use") +// - Small source code footprint ("easy to maintain") +// - No dependencies ("ease of use") +// +// =========================================================================== +// +// I/O callbacks +// +// I/O callbacks allow you to read from arbitrary sources, like packaged +// files or some other source. Data read from callbacks are processed +// through a small internal buffer (currently 128 bytes) to try to reduce +// overhead. +// +// The three functions you must define are "read" (reads some bytes of data), +// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). +// +// =========================================================================== +// +// SIMD support +// +// The JPEG decoder will try to automatically use SIMD kernels on x86 when +// supported by the compiler. For ARM Neon support, you must explicitly +// request it. +// +// (The old do-it-yourself SIMD API is no longer supported in the current +// code.) +// +// On x86, SSE2 will automatically be used when available based on a run-time +// test; if not, the generic C versions are used as a fall-back. On ARM targets, +// the typical path is to have separate builds for NEON and non-NEON devices +// (at least this is true for iOS and Android). Therefore, the NEON support is +// toggled by a build flag: define STBI_NEON to get NEON loops. +// +// If for some reason you do not want to use any of SIMD code, or if +// you have issues compiling it, you can disable it entirely by +// defining STBI_NO_SIMD. +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image supports loading HDR images in general, and currently the Radiance +// .HDR file format specifically. You can still load any file through the existing +// interface; if you attempt to load an HDR file, it will be automatically remapped +// to LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; +// both of these constants can be reconfigured through this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); +// +// =========================================================================== +// +// iPhone PNG support: +// +// We optionally support converting iPhone-formatted PNGs (which store +// premultiplied BGRA) back to RGB, even though they're internally encoded +// differently. To enable this conversion, call +// stbi_convert_iphone_png_to_rgb(1). +// +// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per +// pixel to remove any premultiplied alpha *only* if the image file explicitly +// says there's premultiplied data (currently only happens in iPhone images, +// and only if iPhone convert-to-rgb processing is on). +// +// =========================================================================== +// +// ADDITIONAL CONFIGURATION +// +// - You can suppress implementation of any of the decoders to reduce +// your code footprint by #defining one or more of the following +// symbols before creating the implementation. +// +// STBI_NO_JPEG +// STBI_NO_PNG +// STBI_NO_BMP +// STBI_NO_PSD +// STBI_NO_TGA +// STBI_NO_GIF +// STBI_NO_HDR +// STBI_NO_PIC +// STBI_NO_PNM (.ppm and .pgm) +// +// - You can request *only* certain decoders and suppress all other ones +// (this will be more forward-compatible, as addition of new decoders +// doesn't require you to disable them explicitly): +// +// STBI_ONLY_JPEG +// STBI_ONLY_PNG +// STBI_ONLY_BMP +// STBI_ONLY_PSD +// STBI_ONLY_TGA +// STBI_ONLY_GIF +// STBI_ONLY_HDR +// STBI_ONLY_PIC +// STBI_ONLY_PNM (.ppm and .pgm) +// +// - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still +// want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB +// +// - If you define STBI_MAX_DIMENSIONS, stb_image will reject images greater +// than that size (in either width or height) without further processing. +// This is to let programs in the wild set an upper bound to prevent +// denial-of-service attacks on untrusted data, as one could generate a +// valid image of gigantic dimensions and force stb_image to allocate a +// huge block of memory and spend disproportionate time decoding it. By +// default this is set to (1 << 24), which is 16777216, but that's still +// very big. + +#ifndef STBI_NO_STDIO +#include +#endif // STBI_NO_STDIO + +#define STBI_VERSION 1 + +enum +{ + STBI_default = 0, // only used for desired_channels + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4 +}; + +#include +typedef unsigned char stbi_uc; +typedef unsigned short stbi_us; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef STBIDEF +#ifdef STB_IMAGE_STATIC +#define STBIDEF static +#else +#define STBIDEF extern +#endif +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// PRIMARY API - works on images of any type +// + +// +// load image by filename, open file, or memory buffer +// + +typedef struct +{ + int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read + void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative + int (*eof) (void *user); // returns nonzero if we are at end of file/data +} stbi_io_callbacks; + +//////////////////////////////////// +// +// 8-bits-per-channel interface +// + +STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *channels_in_file, int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); +// for stbi_load_from_file, file pointer is left pointing immediately after image +#endif + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp); +#endif + +#ifdef STBI_WINDOWS_UTF8 +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); +#endif + +//////////////////////////////////// +// +// 16-bits-per-channel interface +// + +STBIDEF stbi_us *stbi_load_16_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_us *stbi_load_16 (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); +STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); +#endif + +//////////////////////////////////// +// +// float-per-channel interface +// +#ifndef STBI_NO_LINEAR + STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); + STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); + + #ifndef STBI_NO_STDIO + STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); + STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); + #endif +#endif + +#ifndef STBI_NO_HDR + STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); + STBIDEF void stbi_hdr_to_ldr_scale(float scale); +#endif // STBI_NO_HDR + +#ifndef STBI_NO_LINEAR + STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); + STBIDEF void stbi_ldr_to_hdr_scale(float scale); +#endif // STBI_NO_LINEAR + +// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename); +STBIDEF int stbi_is_hdr_from_file(FILE *f); +#endif // STBI_NO_STDIO + + +// get a VERY brief reason for failure +// on most compilers (and ALL modern mainstream compilers) this is threadsafe +STBIDEF const char *stbi_failure_reason (void); + +// free the loaded image -- this is just free() +STBIDEF void stbi_image_free (void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len); +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, void *user); + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); +STBIDEF int stbi_is_16_bit (char const *filename); +STBIDEF int stbi_is_16_bit_from_file(FILE *f); +#endif + + + +// for image formats that explicitly notate that they have premultiplied alpha, +// we just return the colors as stored in the file. set this flag to force +// unpremultiplication. results are undefined if the unpremultiply overflow. +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); + +// indicate whether we should process iphone images back to canonical format, +// or just pass them through "as-is" +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); + +// flip the image vertically, so the first pixel in the output array is the bottom left +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); + +// as above, but only applies to images loaded on the thread that calls the function +// this function is only available if your compiler supports thread-local variables; +// calling it will fail to link if your compiler doesn't +STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply); +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert); +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip); + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); +STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ + || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ + || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ + || defined(STBI_ONLY_ZLIB) + #ifndef STBI_ONLY_JPEG + #define STBI_NO_JPEG + #endif + #ifndef STBI_ONLY_PNG + #define STBI_NO_PNG + #endif + #ifndef STBI_ONLY_BMP + #define STBI_NO_BMP + #endif + #ifndef STBI_ONLY_PSD + #define STBI_NO_PSD + #endif + #ifndef STBI_ONLY_TGA + #define STBI_NO_TGA + #endif + #ifndef STBI_ONLY_GIF + #define STBI_NO_GIF + #endif + #ifndef STBI_ONLY_HDR + #define STBI_NO_HDR + #endif + #ifndef STBI_ONLY_PIC + #define STBI_NO_PIC + #endif + #ifndef STBI_ONLY_PNM + #define STBI_NO_PNM + #endif +#endif + +#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) +#define STBI_NO_ZLIB +#endif + + +#include +#include // ptrdiff_t on osx +#include +#include +#include + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +#include // ldexp, pow +#endif + +#ifndef STBI_NO_STDIO +#include +#endif + +#ifndef STBI_ASSERT +#include +#define STBI_ASSERT(x) assert(x) +#endif + +#ifdef __cplusplus +#define STBI_EXTERN extern "C" +#else +#define STBI_EXTERN extern +#endif + + +#ifndef _MSC_VER + #ifdef __cplusplus + #define stbi_inline inline + #else + #define stbi_inline + #endif +#else + #define stbi_inline __forceinline +#endif + +#ifndef STBI_NO_THREAD_LOCALS + #if defined(__cplusplus) && __cplusplus >= 201103L + #define STBI_THREAD_LOCAL thread_local + #elif defined(__GNUC__) && __GNUC__ < 5 + #define STBI_THREAD_LOCAL __thread + #elif defined(_MSC_VER) + #define STBI_THREAD_LOCAL __declspec(thread) + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) + #define STBI_THREAD_LOCAL _Thread_local + #endif + + #ifndef STBI_THREAD_LOCAL + #if defined(__GNUC__) + #define STBI_THREAD_LOCAL __thread + #endif + #endif +#endif + +#if defined(_MSC_VER) || defined(__SYMBIAN32__) +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +#else +#include +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +#endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif + +#ifdef _MSC_VER +#define STBI_HAS_LROTL +#endif + +#ifdef STBI_HAS_LROTL + #define stbi_lrot(x,y) _lrotl(x,y) +#else + #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (-(y) & 31))) +#endif + +#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) +// ok +#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) +// ok +#else +#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." +#endif + +#ifndef STBI_MALLOC +#define STBI_MALLOC(sz) malloc(sz) +#define STBI_REALLOC(p,newsz) realloc(p,newsz) +#define STBI_FREE(p) free(p) +#endif + +#ifndef STBI_REALLOC_SIZED +#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) +#endif + +// x86/x64 detection +#if defined(__x86_64__) || defined(_M_X64) +#define STBI__X64_TARGET +#elif defined(__i386) || defined(_M_IX86) +#define STBI__X86_TARGET +#endif + +#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) +// gcc doesn't support sse2 intrinsics unless you compile with -msse2, +// which in turn means it gets to use SSE2 everywhere. This is unfortunate, +// but previous attempts to provide the SSE2 functions with runtime +// detection caused numerous issues. The way architecture extensions are +// exposed in GCC/Clang is, sadly, not really suited for one-file libs. +// New behavior: if compiled with -msse2, we use SSE2 without any +// detection; if not, we don't use it at all. +#define STBI_NO_SIMD +#endif + +#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) +// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET +// +// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the +// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. +// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not +// simultaneously enabling "-mstackrealign". +// +// See https://github.com/nothings/stb/issues/81 for more information. +// +// So default to no SSE2 on 32-bit MinGW. If you've read this far and added +// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. +#define STBI_NO_SIMD +#endif + +#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) +#define STBI_SSE2 +#include + +#ifdef _MSC_VER + +#if _MSC_VER >= 1400 // not VC6 +#include // __cpuid +static int stbi__cpuid3(void) +{ + int info[4]; + __cpuid(info,1); + return info[3]; +} +#else +static int stbi__cpuid3(void) +{ + int res; + __asm { + mov eax,1 + cpuid + mov res,edx + } + return res; +} +#endif + +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + int info3 = stbi__cpuid3(); + return ((info3 >> 26) & 1) != 0; +} +#endif + +#else // assume GCC-style if not VC++ +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + // If we're even attempting to compile this on GCC/Clang, that means + // -msse2 is on, which means the compiler is allowed to use SSE2 + // instructions at will, and so are we. + return 1; +} +#endif + +#endif +#endif + +// ARM NEON +#if defined(STBI_NO_SIMD) && defined(STBI_NEON) +#undef STBI_NEON +#endif + +#ifdef STBI_NEON +#include +#ifdef _MSC_VER +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name +#else +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) +#endif +#endif + +#ifndef STBI_SIMD_ALIGN +#define STBI_SIMD_ALIGN(type, name) type name +#endif + +#ifndef STBI_MAX_DIMENSIONS +#define STBI_MAX_DIMENSIONS (1 << 24) +#endif + +/////////////////////////////////////////////// +// +// stbi__context struct and start_xxx functions + +// stbi__context structure is our basic context used by all images, so it +// contains all the IO context, plus some basic image information +typedef struct +{ + stbi__uint32 img_x, img_y; + int img_n, img_out_n; + + stbi_io_callbacks io; + void *io_user_data; + + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + int callback_already_read; + + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original, *img_buffer_original_end; +} stbi__context; + + +static void stbi__refill_buffer(stbi__context *s); + +// initialize a memory-decode context +static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) +{ + s->io.read = NULL; + s->read_from_callbacks = 0; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; + s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len; +} + +// initialize a callback-based context +static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) +{ + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->callback_already_read = 0; + s->img_buffer = s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); + s->img_buffer_original_end = s->img_buffer_end; +} + +#ifndef STBI_NO_STDIO + +static int stbi__stdio_read(void *user, char *data, int size) +{ + return (int) fread(data,1,size,(FILE*) user); +} + +static void stbi__stdio_skip(void *user, int n) +{ + int ch; + fseek((FILE*) user, n, SEEK_CUR); + ch = fgetc((FILE*) user); /* have to read a byte to reset feof()'s flag */ + if (ch != EOF) { + ungetc(ch, (FILE *) user); /* push byte back onto stream if valid. */ + } +} + +static int stbi__stdio_eof(void *user) +{ + return feof((FILE*) user) || ferror((FILE *) user); +} + +static stbi_io_callbacks stbi__stdio_callbacks = +{ + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, +}; + +static void stbi__start_file(stbi__context *s, FILE *f) +{ + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); +} + +//static void stop_file(stbi__context *s) { } + +#endif // !STBI_NO_STDIO + +static void stbi__rewind(stbi__context *s) +{ + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 bytes + s->img_buffer = s->img_buffer_original; + s->img_buffer_end = s->img_buffer_original_end; +} + +enum +{ + STBI_ORDER_RGB, + STBI_ORDER_BGR +}; + +typedef struct +{ + int bits_per_channel; + int num_channels; + int channel_order; +} stbi__result_info; + +#ifndef STBI_NO_JPEG +static int stbi__jpeg_test(stbi__context *s); +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNG +static int stbi__png_test(stbi__context *s); +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__png_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_BMP +static int stbi__bmp_test(stbi__context *s); +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_TGA +static int stbi__tga_test(stbi__context *s); +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s); +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc); +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__psd_is16(stbi__context *s); +#endif + +#ifndef STBI_NO_HDR +static int stbi__hdr_test(stbi__context *s); +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_test(stbi__context *s); +static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_GIF +static int stbi__gif_test(stbi__context *s); +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp); +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNM +static int stbi__pnm_test(stbi__context *s); +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); +static int stbi__pnm_is16(stbi__context *s); +#endif + +static +#ifdef STBI_THREAD_LOCAL +STBI_THREAD_LOCAL +#endif +const char *stbi__g_failure_reason; + +STBIDEF const char *stbi_failure_reason(void) +{ + return stbi__g_failure_reason; +} + +#ifndef STBI_NO_FAILURE_STRINGS +static int stbi__err(const char *str) +{ + stbi__g_failure_reason = str; + return 0; +} +#endif + +static void *stbi__malloc(size_t size) +{ + return STBI_MALLOC(size); +} + +// stb_image uses ints pervasively, including for offset calculations. +// therefore the largest decoded image size we can support with the +// current code, even on 64-bit targets, is INT_MAX. this is not a +// significant limitation for the intended use case. +// +// we do, however, need to make sure our size calculations don't +// overflow. hence a few helper functions for size calculations that +// multiply integers together, making sure that they're non-negative +// and no overflow occurs. + +// return 1 if the sum is valid, 0 on overflow. +// negative terms are considered invalid. +static int stbi__addsizes_valid(int a, int b) +{ + if (b < 0) return 0; + // now 0 <= b <= INT_MAX, hence also + // 0 <= INT_MAX - b <= INTMAX. + // And "a + b <= INT_MAX" (which might overflow) is the + // same as a <= INT_MAX - b (no overflow) + return a <= INT_MAX - b; +} + +// returns 1 if the product is valid, 0 on overflow. +// negative factors are considered invalid. +static int stbi__mul2sizes_valid(int a, int b) +{ + if (a < 0 || b < 0) return 0; + if (b == 0) return 1; // mul-by-0 is always safe + // portable way to check for no overflows in a*b + return a <= INT_MAX/b; +} + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow +static int stbi__mad2sizes_valid(int a, int b, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add); +} +#endif + +// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow +static int stbi__mad3sizes_valid(int a, int b, int c, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && + stbi__addsizes_valid(a*b*c, add); +} + +// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && + stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add); +} +#endif + +#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) +// mallocs with size overflow checking +static void *stbi__malloc_mad2(int a, int b, int add) +{ + if (!stbi__mad2sizes_valid(a, b, add)) return NULL; + return stbi__malloc(a*b + add); +} +#endif + +static void *stbi__malloc_mad3(int a, int b, int c, int add) +{ + if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL; + return stbi__malloc(a*b*c + add); +} + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) +static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) +{ + if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; + return stbi__malloc(a*b*c*d + add); +} +#endif + +// returns 1 if the sum of two signed ints is valid (between -2^31 and 2^31-1 inclusive), 0 on overflow. +static int stbi__addints_valid(int a, int b) +{ + if ((a >= 0) != (b >= 0)) return 1; // a and b have different signs, so no overflow + if (a < 0 && b < 0) return a >= INT_MIN - b; // same as a + b >= INT_MIN; INT_MIN - b cannot overflow since b < 0. + return a <= INT_MAX - b; +} + +// returns 1 if the product of two ints fits in a signed short, 0 on overflow. +static int stbi__mul2shorts_valid(int a, int b) +{ + if (b == 0 || b == -1) return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow + if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX/b; // product is positive, so similar to mul2sizes_valid + if (b < 0) return a <= SHRT_MIN / b; // same as a * b >= SHRT_MIN + return a >= SHRT_MIN / b; +} + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +#ifdef STBI_NO_FAILURE_STRINGS + #define stbi__err(x,y) 0 +#elif defined(STBI_FAILURE_USERMSG) + #define stbi__err(x,y) stbi__err(y) +#else + #define stbi__err(x,y) stbi__err(x) +#endif + +#define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) +#define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) + +STBIDEF void stbi_image_free(void *retval_from_stbi_load) +{ + STBI_FREE(retval_from_stbi_load); +} + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_HDR +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +static int stbi__vertically_flip_on_load_global = 0; + +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_global = flag_true_if_should_flip; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global +#else +static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; + +STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load_local = flag_true_if_should_flip; + stbi__vertically_flip_on_load_set = 1; +} + +#define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ + ? stbi__vertically_flip_on_load_local \ + : stbi__vertically_flip_on_load_global) +#endif // STBI_THREAD_LOCAL + +static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields + ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed + ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order + ri->num_channels = 0; + + // test the formats with a very explicit header first (at least a FOURCC + // or distinctive magic number first) + #ifndef STBI_NO_PNG + if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_BMP + if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_GIF + if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_PSD + if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp, ri, bpc); + #else + STBI_NOTUSED(bpc); + #endif + #ifndef STBI_NO_PIC + if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp, ri); + #endif + + // then the formats that can end up attempting to load with just 1 or 2 + // bytes matching expectations; these are prone to false positives, so + // try them later + #ifndef STBI_NO_JPEG + if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri); + #endif + #ifndef STBI_NO_PNM + if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp, ri); + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float *hdr = stbi__hdr_load(s, x,y,comp,req_comp, ri); + return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + + #ifndef STBI_NO_TGA + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) + return stbi__tga_load(s,x,y,comp,req_comp, ri); + #endif + + return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); +} + +static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi_uc *reduced; + + reduced = (stbi_uc *) stbi__malloc(img_len); + if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling + + STBI_FREE(orig); + return reduced; +} + +static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels) +{ + int i; + int img_len = w * h * channels; + stbi__uint16 *enlarged; + + enlarged = (stbi__uint16 *) stbi__malloc(img_len*2); + if (enlarged == NULL) return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff + + STBI_FREE(orig); + return enlarged; +} + +static void stbi__vertical_flip(void *image, int w, int h, int bytes_per_pixel) +{ + int row; + size_t bytes_per_row = (size_t)w * bytes_per_pixel; + stbi_uc temp[2048]; + stbi_uc *bytes = (stbi_uc *)image; + + for (row = 0; row < (h>>1); row++) { + stbi_uc *row0 = bytes + row*bytes_per_row; + stbi_uc *row1 = bytes + (h - row - 1)*bytes_per_row; + // swap row0 with row1 + size_t bytes_left = bytes_per_row; + while (bytes_left) { + size_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); + memcpy(temp, row0, bytes_copy); + memcpy(row0, row1, bytes_copy); + memcpy(row1, temp, bytes_copy); + row0 += bytes_copy; + row1 += bytes_copy; + bytes_left -= bytes_copy; + } + } +} + +#ifndef STBI_NO_GIF +static void stbi__vertical_flip_slices(void *image, int w, int h, int z, int bytes_per_pixel) +{ + int slice; + int slice_size = w * h * bytes_per_pixel; + + stbi_uc *bytes = (stbi_uc *)image; + for (slice = 0; slice < z; ++slice) { + stbi__vertical_flip(bytes, w, h, bytes_per_pixel); + bytes += slice_size; + } +} +#endif + +static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 8) { + result = stbi__convert_16_to_8((stbi__uint16 *) result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 8; + } + + // @TODO: move stbi__convert_format to here + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); + } + + return (unsigned char *) result; +} + +static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__result_info ri; + void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); + + if (result == NULL) + return NULL; + + // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. + STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); + + if (ri.bits_per_channel != 16) { + result = stbi__convert_8_to_16((stbi_uc *) result, *x, *y, req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 16; + } + + // @TODO: move stbi__convert_format16 to here + // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); + } + + return (stbi__uint16 *) result; +} + +#if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) +static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp) +{ + if (stbi__vertically_flip_on_load && result != NULL) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); + } +} +#endif + +#ifndef STBI_NO_STDIO + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); +STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); +#endif + +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) +STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) +{ + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); +} +#endif + +static FILE *stbi__fopen(char const *filename, char const *mode) +{ + FILE *f; +#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) + return 0; + +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; +#else + f = _wfopen(wFilename, wMode); +#endif + +#elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f=0; +#else + f = fopen(filename, mode); +#endif + return f; +} + + +STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + unsigned char *result; + if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__uint16 *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_and_postprocess_16bit(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + stbi__uint16 *result; + if (!f) return (stbi_us *) stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file_16(f,x,y,comp,req_comp); + fclose(f); + return result; +} + + +#endif //!STBI_NO_STDIO + +STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); +} + +STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); + return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); +} + +STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); +} + +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_mem(&s,buffer,len); + + result = (unsigned char*) stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); + if (stbi__vertically_flip_on_load) { + stbi__vertical_flip_slices( result, *x, *y, *z, *comp ); + } + + return result; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + stbi__result_info ri; + float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp, &ri); + if (hdr_data) + stbi__float_postprocess(hdr_data,x,y,comp,req_comp); + return hdr_data; + } + #endif + data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); + if (data) + return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); +} + +STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + float *result; + FILE *f = stbi__fopen(filename, "rb"); + if (!f) return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_file(&s,f); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} +#endif // !STBI_NO_STDIO + +#endif // !STBI_NO_LINEAR + +// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is +// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always +// reports false! + +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; + #endif +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result=0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +STBIDEF int stbi_is_hdr_from_file(FILE *f) +{ + #ifndef STBI_NO_HDR + long pos = ftell(f); + int res; + stbi__context s; + stbi__start_file(&s,f); + res = stbi__hdr_test(&s); + fseek(f, pos, SEEK_SET); + return res; + #else + STBI_NOTUSED(f); + return 0; + #endif +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(clbk); + STBI_NOTUSED(user); + return 0; + #endif +} + +#ifndef STBI_NO_LINEAR +static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; + +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } +STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +#endif + +static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; + +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } +STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } + + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum +{ + STBI__SCAN_load=0, + STBI__SCAN_type, + STBI__SCAN_header +}; + +static void stbi__refill_buffer(stbi__context *s) +{ + int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); + s->callback_already_read += (int) (s->img_buffer - s->img_buffer_original); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start+1; + *s->img_buffer = 0; + } else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; + } +} + +stbi_inline static stbi_uc stbi__get8(stbi__context *s) +{ + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; + } + return 0; +} + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +stbi_inline static int stbi__at_eof(stbi__context *s) +{ + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) +// nothing +#else +static void stbi__skip(stbi__context *s, int n) +{ + if (n == 0) return; // already there! + if (n < 0) { + s->img_buffer = s->img_buffer_end; + return; + } + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) +// nothing +#else +static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) +{ + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); + res = (count == (n-blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer+n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } else + return 0; +} +#endif + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static int stbi__get16be(stbi__context *s) +{ + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) +// nothing +#else +static stbi__uint32 stbi__get32be(stbi__context *s) +{ + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); +} +#endif + +#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) +// nothing +#else +static int stbi__get16le(stbi__context *s) +{ + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); +} +#endif + +#ifndef STBI_NO_BMP +static stbi__uint32 stbi__get32le(stbi__context *s) +{ + stbi__uint32 z = stbi__get16le(s); + z += (stbi__uint32)stbi__get16le(s) << 16; + return z; +} +#endif + +#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings + +#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) +{ + return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) +// nothing +#else +static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + unsigned char *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + unsigned char *src = data + j * x * img_n ; + unsigned char *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=255; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 stbi__compute_y_16(int r, int g, int b) +{ + return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8); +} +#endif + +#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) +// nothing +#else +static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + stbi__uint16 *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2); + if (good == NULL) { + STBI_FREE(data); + return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + stbi__uint16 *src = data + j * x * img_n ; + stbi__uint16 *dest = good + j * x * req_comp; + + #define STBI__COMBO(a,b) ((a)*8+(b)) + #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=0xffff; } break; + STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=0xffff; } break; + STBI__CASE(2,1) { dest[0]=src[0]; } break; + STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=0xffff; } break; + STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = 0xffff; } break; + STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; + STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = src[3]; } break; + STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; + default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return (stbi__uint16*) stbi__errpuc("unsupported", "Unsupported format conversion"); + } + #undef STBI__CASE + } + + STBI_FREE(data); + return good; +} +#endif + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) +{ + int i,k,n; + float *output; + if (!data) return NULL; + output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); + } + } + if (n < comp) { + for (i=0; i < x*y; ++i) { + output[i*comp + n] = data[i*comp + n]/255.0f; + } + } + STBI_FREE(data); + return output; +} +#endif + +#ifndef STBI_NO_HDR +#define stbi__float2int(x) ((int) (x)) +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) +{ + int i,k,n; + stbi_uc *output; + if (!data) return NULL; + output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0); + if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + if (k < comp) { + float z = data[i*comp+k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + } + STBI_FREE(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder +// +// simple implementation +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - some SIMD kernels for common paths on targets with SSE2/NEON +// - uses a lot of intermediate memory, could cache poorly + +#ifndef STBI_NO_JPEG + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct +{ + stbi__context *s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi__uint16 dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; + +// sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + +// definition of jpeg image component + struct + { + int id; + int h,v; + int tq; + int hd,ha; + int dc_pred; + + int x,y,w2,h2; + stbi_uc *data; + void *raw_data, *raw_coeff; + stbi_uc *linebuf; + short *coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + int jfif; + int app14_color_transform; // Adobe APP14 tag + int rgb; + + int scan_n, order[4]; + int restart_interval, todo; + +// kernels + void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); + stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman *h, int *count) +{ + int i,j,k=0; + unsigned int code; + // build size list for each symbol (from JPEG spec) + for (i=0; i < 16; ++i) { + for (j=0; j < count[i]; ++j) { + h->size[k++] = (stbi_uc) (i+1); + if(k >= 257) return stbi__err("bad size list","Corrupt JPEG"); + } + } + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for(j=1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16) (code++); + if (code-1 >= (1u << j)) return stbi__err("bad code lengths","Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16-j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i=0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS-s); + int m = 1 << (FAST_BITS-s); + for (j=0; j < m; ++j) { + h->fast[c+j] = (stbi_uc) i; + } + } + } + return 1; +} + +// build a table that decodes both magnitude and value of small ACs in +// one go. +static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) +{ + int i; + for (i=0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; + + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) k += (~0U << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = (stbi__int16) ((k * 256) + (run * 16) + (len + magbits)); + } + } + } +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg *j) +{ + do { + unsigned int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes + if (c != 0) { + j->marker = (unsigned char) c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static const stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; + +// decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) +{ + unsigned int temp; + int c,k; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k=FAST_BITS+1 ; ; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + if(c < 0 || c >= 256) // symbol id out of bounds! + return -1; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing + + sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & (sgn - 1)); +} + +// get some unsigned bits +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) +{ + unsigned int k; + if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; +} + +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) +{ + unsigned int k; + if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); + if (j->code_bits < 1) return 0; // ran out of bits from stream, return 0s intead of continuing + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static const stbi_uc stbi__jpeg_dezigzag[64+15] = +{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant) +{ + int diff,dc,k; + int t; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("bad huffman code","Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data,0,64*sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta","Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, dequant[0])) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short) (dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * dequant[zig]); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) +{ + int diff,dc; + int t; + if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data,0,64*sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0 || t > 15) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + diff = t ? stbi__extend_receive(j, t) : 0; + + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta", "Corrupt JPEG"); + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, 1 << j->succ_low)) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + data[0] = (short) (dc * (1 << j->succ_low)); + } else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) + data[0] += (short) (1 << j->succ_low); + } + return 1; +} + +// @OPTIMIZE: store non-zigzagged during the decode passes, +// and only de-zigzag when dequantizing +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) +{ + int k; + if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->succ_high == 0) { + int shift = j->succ_low; + + if (j->eob_run) { + --j->eob_run; + return 1; + } + + k = j->spec_start; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * (1 << shift)); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r); + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + --j->eob_run; + break; + } + k += 16; + } else { + k += r; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * (1 << shift)); + } + } + } while (k <= j->spec_end); + } else { + // refinement scan for these AC coefficients + + short bit = (short) (1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short *p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + } else { + k = j->spec_start; + do { + int r,s; + int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + r = 64; // force end of block + } else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } else { + if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short *p = &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } else { + if (r == 0) { + *p = (short) s; + break; + } + --r; + } + } + } while (k <= j->spec_end); + } + } + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) +{ + // trick to use a single test to catch both cases + if ((unsigned int) x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (stbi_uc) x; +} + +#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) +#define stbi__fsh(x) ((x) * 4096) + +// derived from jidctint -- DCT_ISLOW +#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ + int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2+p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3*stbi__f2f(-1.847759065f); \ + t3 = p1 + p2*stbi__f2f( 0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2+p3); \ + t1 = stbi__fsh(p2-p3); \ + x0 = t0+t3; \ + x3 = t0-t3; \ + x1 = t1+t2; \ + x2 = t1-t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0+t2; \ + p4 = t1+t3; \ + p1 = t0+t3; \ + p2 = t1+t2; \ + p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ + t0 = t0*stbi__f2f( 0.298631336f); \ + t1 = t1*stbi__f2f( 2.053119869f); \ + t2 = t2*stbi__f2f( 3.072711026f); \ + t3 = t3*stbi__f2f( 1.501321110f); \ + p1 = p5 + p1*stbi__f2f(-0.899976223f); \ + p2 = p5 + p2*stbi__f2f(-2.562915447f); \ + p3 = p3*stbi__f2f(-1.961570560f); \ + p4 = p4*stbi__f2f(-0.390180644f); \ + t3 += p1+p4; \ + t2 += p2+p3; \ + t1 += p2+p4; \ + t0 += p1+p3; + +static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) +{ + int i,val[64],*v=val; + stbi_uc *o; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0]*4; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128<<17); + x1 += 65536 + (128<<17); + x2 += 65536 + (128<<17); + x3 += 65536 + (128<<17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0+t3) >> 17); + o[7] = stbi__clamp((x0-t3) >> 17); + o[1] = stbi__clamp((x1+t2) >> 17); + o[6] = stbi__clamp((x1-t2) >> 17); + o[2] = stbi__clamp((x2+t1) >> 17); + o[5] = stbi__clamp((x2-t1) >> 17); + o[3] = stbi__clamp((x3+t0) >> 17); + o[4] = stbi__clamp((x3-t0) >> 17); + } +} + +#ifdef STBI_SSE2 +// sse2 integer IDCT. not the fastest possible implementation but it +// produces bit-identical results to the generic C version so it's +// fully "transparent". +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; + + // dot product constant: even elems=x, odd elems=y + #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) + + // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) + // out(1) = c1[even]*x + c1[odd]*y + #define dct_rot(out0,out1, x,y,c0,c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) + + // out = in << 12 (in 16-bit, out 32-bit) + #define dct_widen(out, in) \ + __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + + // wide add + #define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + + // wide sub + #define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + + // butterfly a/b, add bias, then shift by "s" and pack + #define dct_bfly32o(out0, out1, a,b,bias,s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ + out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ + } + + // 8-bit interleave step (for transposes) + #define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) + + // 16-bit interleave step (for transposes) + #define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) + + #define dct_pass(bias,shift) \ + { \ + /* even part */ \ + dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ + dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0,row7, x0,x7,bias,shift); \ + dct_bfly32o(row1,row6, x1,x6,bias,shift); \ + dct_bfly32o(row2,row5, x2,x5,bias,shift); \ + dct_bfly32o(row3,row4, x3,x4,bias,shift); \ + } + + __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); + __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); + __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); + __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); + __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); + __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); + + // rounding biases in column/row passes, see stbi__idct_block for explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); + + // load + row0 = _mm_load_si128((const __m128i *) (data + 0*8)); + row1 = _mm_load_si128((const __m128i *) (data + 1*8)); + row2 = _mm_load_si128((const __m128i *) (data + 2*8)); + row3 = _mm_load_si128((const __m128i *) (data + 3*8)); + row4 = _mm_load_si128((const __m128i *) (data + 4*8)); + row5 = _mm_load_si128((const __m128i *) (data + 5*8)); + row6 = _mm_load_si128((const __m128i *) (data + 6*8)); + row7 = _mm_load_si128((const __m128i *) (data + 7*8)); + + // column pass + dct_pass(bias_0, 10); + + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); + + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); + + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } + + // row pass + dct_pass(bias_1, 17); + + { + // pack + __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); + + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... + + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... + + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... + + // store + _mm_storel_epi64((__m128i *) out, p0); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p2); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p1); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p3); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); + } + +#undef dct_const +#undef dct_rot +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_interleave8 +#undef dct_interleave16 +#undef dct_pass +} + +#endif // STBI_SSE2 + +#ifdef STBI_NEON + +// NEON integer IDCT. should produce bit-identical +// results to the generic C version. +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); + +#define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) + +#define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) + +#define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) + +// wide add +#define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) + +// butterfly a/b, then shift using "shiftop" by "s" and pack +#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } + +#define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ + dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ + dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ + dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ + } + + // load + row0 = vld1q_s16(data + 0*8); + row1 = vld1q_s16(data + 1*8); + row2 = vld1q_s16(data + 2*8); + row3 = vld1q_s16(data + 3*8); + row4 = vld1q_s16(data + 4*8); + row5 = vld1q_s16(data + 5*8); + row6 = vld1q_s16(data + 6*8); + row7 = vld1q_s16(data + 7*8); + + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + + // column pass + dct_pass(vrshrn_n_s32, 10); + + // 16bit 8x8 transpose + { +// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. +// whether compilers actually get this is another story, sadly. +#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } +#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } + + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); + + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); + + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); + +#undef dct_trn16 +#undef dct_trn32 +#undef dct_trn64 + } + + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); + + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + + // again, these can translate into one instruction, but often don't. +#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } +#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } + + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! + + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); + + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); + + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); + + // store + vst1_u8(out, p0); out += out_stride; + vst1_u8(out, p1); out += out_stride; + vst1_u8(out, p2); out += out_stride; + vst1_u8(out, p3); out += out_stride; + vst1_u8(out, p4); out += out_stride; + vst1_u8(out, p5); out += out_stride; + vst1_u8(out, p6); out += out_stride; + vst1_u8(out, p7); + +#undef dct_trn8_8 +#undef dct_trn8_16 +#undef dct_trn8_32 + } + +#undef dct_long_mul +#undef dct_long_mac +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_pass +} + +#endif // STBI_NEON + +#define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg *j) +{ + stbi_uc x; + if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } + x = stbi__get8(j->s); + if (x != 0xff) return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); // consume repeated 0xff fill bytes + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg *j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg *z) +{ + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i,j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + STBI_SIMD_ALIGN(short, data[64]); + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x)*8; + int y2 = (j*z->img_comp[n].v + y)*8; + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } else { + if (z->scan_n == 1) { + int i,j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x); + int y2 = (j*z->img_comp[n].v + y); + short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } +} + +static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) +{ + int i; + for (i=0; i < 64; ++i) + data[i] *= dequant[i]; +} + +static void stbi__jpeg_finish(stbi__jpeg *z) +{ + if (z->progressive) { + // dequantize and idct the data + int i,j,n; + for (n=0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + } + } + } + } +} + +static int stbi__process_marker(stbi__jpeg *z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker","Corrupt JPEG"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s)-2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4, sixteen = (p != 0); + int t = q & 15,i; + if (p != 0 && p != 1) return stbi__err("bad DQT type","Corrupt JPEG"); + if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); + + for (i=0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); + L -= (sixteen ? 129 : 65); + } + return L==0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s)-2; + while (L > 0) { + stbi_uc *v; + int sizes[16],i,n=0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); + for (i=0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + if(n > 256) return stbi__err("bad DHT header","Corrupt JPEG"); // Loop over i < n would write past end of values! + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i=0; i < n; ++i) + v[i] = stbi__get8(z->s); + if (tc != 0) + stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); + L -= n; + } + return L==0; + } + + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + L = stbi__get16be(z->s); + if (L < 2) { + if (m == 0xFE) + return stbi__err("bad COM len","Corrupt JPEG"); + else + return stbi__err("bad APP len","Corrupt JPEG"); + } + L -= 2; + + if (m == 0xE0 && L >= 5) { // JFIF APP0 segment + static const unsigned char tag[5] = {'J','F','I','F','\0'}; + int ok = 1; + int i; + for (i=0; i < 5; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 5; + if (ok) + z->jfif = 1; + } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment + static const unsigned char tag[6] = {'A','d','o','b','e','\0'}; + int ok = 1; + int i; + for (i=0; i < 6; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 6; + if (ok) { + stbi__get8(z->s); // version + stbi__get16be(z->s); // flags0 + stbi__get16be(z->s); // flags1 + z->app14_color_transform = stbi__get8(z->s); // color transform + L -= 6; + } + } + + stbi__skip(z->s, L); + return 1; + } + + return stbi__err("unknown marker","Corrupt JPEG"); +} + +// after we see SOS +static int stbi__process_scan_header(stbi__jpeg *z) +{ + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); + if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); + for (i=0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) return 0; // no match + z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); + z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); + z->order[i] = which; + } + + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } else { + if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; +} + +static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) +{ + int i; + for (i=0; i < ncomp; ++i) { + if (z->img_comp[i].raw_data) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].raw_data = NULL; + z->img_comp[i].data = NULL; + } + if (z->img_comp[i].raw_coeff) { + STBI_FREE(z->img_comp[i].raw_coeff); + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].coeff = 0; + } + if (z->img_comp[i].linebuf) { + STBI_FREE(z->img_comp[i].linebuf); + z->img_comp[i].linebuf = NULL; + } + } + return why; +} + +static int stbi__process_frame_header(stbi__jpeg *z, int scan) +{ + stbi__context *s = z->s; + int Lf,p,i,q, h_max=1,v_max=1,c; + Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG + p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + c = stbi__get8(s); + if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count","Corrupt JPEG"); + s->img_n = c; + for (i=0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); + + z->rgb = 0; + for (i=0; i < s->img_n; ++i) { + static const unsigned char rgb[3] = { 'R', 'G', 'B' }; + z->img_comp[i].id = stbi__get8(s); + if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) + ++z->rgb; + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); + z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) return 1; + + if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode"); + + for (i=0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // check that plane subsampling factors are integer ratios; our resamplers can't deal with fractional ratios + // and I've never seen a non-corrupted JPEG file actually use them + for (i=0; i < s->img_n; ++i) { + if (h_max % z->img_comp[i].h != 0) return stbi__err("bad H","Corrupt JPEG"); + if (v_max % z->img_comp[i].v != 0) return stbi__err("bad V","Corrupt JPEG"); + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + // these sizes can't be more than 17 bits + z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; + + for (i=0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + // + // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) + // so these muls can't overflow with 32-bit ints (which we require) + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].linebuf = NULL; + z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); + if (z->img_comp[i].raw_data == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + // align blocks for idct using mmx/sse + z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); + if (z->progressive) { + // w2, h2 are multiples of 8 (see above) + z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; + z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; + z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); + if (z->img_comp[i].raw_coeff == NULL) + return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); + z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); + } + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +#define stbi__SOS(x) ((x) == 0xda) + +#define stbi__SOF_progressive(x) ((x) == 0xc2) + +static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) +{ + int m; + z->jfif = 0; + z->app14_color_transform = -1; // valid values are 0,1,2 + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); + if (scan == STBI__SCAN_type) return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z,m)) return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) return 0; + return 1; +} + +static stbi_uc stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) +{ + // some JPEGs have junk at end, skip over it but if we find what looks + // like a valid marker, resume there + while (!stbi__at_eof(j->s)) { + stbi_uc x = stbi__get8(j->s); + while (x == 0xff) { // might be a marker + if (stbi__at_eof(j->s)) return STBI__MARKER_none; + x = stbi__get8(j->s); + if (x != 0x00 && x != 0xff) { + // not a stuffed zero or lead-in to another marker, looks + // like an actual marker, return it + return x; + } + // stuffed zero has x=0 now which ends the loop, meaning we go + // back to regular scan loop. + // repeated 0xff keeps trying to read the next byte of the marker. + } + } + return STBI__MARKER_none; +} + +// decode image to YCbCr format +static int stbi__decode_jpeg_image(stbi__jpeg *j) +{ + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; + } + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) return 0; + if (!stbi__parse_entropy_coded_data(j)) return 0; + if (j->marker == STBI__MARKER_none ) { + j->marker = stbi__skip_jpeg_junk_at_end(j); + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + m = stbi__get_marker(j); + if (STBI__RESTART(m)) + m = stbi__get_marker(j); + } else if (stbi__DNL(m)) { + int Ld = stbi__get16be(j->s); + stbi__uint32 NL = stbi__get16be(j->s); + if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); + if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); + m = stbi__get_marker(j); + } else { + if (!stbi__process_marker(j, m)) return 1; + m = stbi__get_marker(j); + } + } + if (j->progressive) + stbi__jpeg_finish(j); + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, + int w, int hs); + +#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) + +static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i=0; i < w; ++i) + out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + stbi_uc *input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0]*3 + input[1] + 2); + for (i=1; i < w-1; ++i) { + int n = 3*input[i]+2; + out[i*2+0] = stbi__div4(n+input[i-1]); + out[i*2+1] = stbi__div4(n+input[i+1]); + } + out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); + out[i*2+1] = input[w-1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) + +static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i,t0,t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + out[0] = stbi__div4(t1+2); + for (i=1; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i=0,t0,t1; + + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w-1) & ~7); i += 8) { +#if defined(STBI_SSE2) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); + + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); + + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i *) (out + i*2), outv); +#elif defined(STBI_NEON) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); + + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i*2, o); +#endif + + // "previous" value for next iter + t1 = 3*in_near[i+7] + in_far[i+7]; + } + + t0 = t1; + t1 = 3*in_near[i] + in_far[i]; + out[i*2] = stbi__div16(3*t1 + t0 + 8); + + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} +#endif + +static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i,j; + STBI_NOTUSED(in_far); + for (i=0; i < w; ++i) + for (j=0; j < hs; ++j) + out[i*hs+j] = in_near[i]; + return out; +} + +// this is a reduced-precision calculation of YCbCr-to-RGB introduced +// to make sure the code produces the same results in both SIMD and scalar +#define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) +{ + int i = 0; + +#ifdef STBI_SSE2 + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); + __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); + __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); + __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); + __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); + __m128i xw = _mm_set1_epi16(255); // alpha channel + + for (; i+7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); + __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); + __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); + __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); + + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); + + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); + + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); + + // store + _mm_storeu_si128((__m128i *) (out + 0), o0); + _mm_storeu_si128((__m128i *) (out + 16), o1); + out += 32; + } + } +#endif + +#ifdef STBI_NEON + // in this version, step=3 support would be easy to add. but is there demand? + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); + int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); + int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); + int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); + + for (; i+7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + + // expand to s16 + int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); + + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); + + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); + + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8*4; + } + } +#endif + + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* stbi__float2fixed(1.40200f); + g = y_fixed + cr*-stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#endif + +// set up the kernels +static void stbi__setup_jpeg(stbi__jpeg *j) +{ + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + +#ifdef STBI_SSE2 + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } +#endif + +#ifdef STBI_NEON + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; +#endif +} + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg *j) +{ + stbi__free_jpeg_components(j, j->s->img_n, 0); +} + +typedef struct +{ + resample_row_func resample; + stbi_uc *line0,*line1; + int hs,vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +// fast 0..255 * 0..255 => 0..255 rounded multiplication +static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) +{ + unsigned int t = x*y + 128; + return (stbi_uc) ((t + (t >>8)) >> 8); +} + +static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) +{ + int n, decode_n, is_rgb; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe + + // validate req_comp + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; + + is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); + + if (z->s->img_n == 3 && n < 3 && !is_rgb) + decode_n = 1; + else + decode_n = z->s->img_n; + + // nothing to do if no components requested; check this now to avoid + // accessing uninitialized coutput[0] later + if (decode_n <= 0) { stbi__cleanup_jpeg(z); return NULL; } + + // resample and color-convert + { + int k; + unsigned int i,j; + stbi_uc *output; + stbi_uc *coutput[4] = { NULL, NULL, NULL, NULL }; + + stbi__resample res_comp[4]; + + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs-1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; + else r->resample = stbi__resample_row_generic; + } + + // can't error after this so, this is safe + output = (stbi_uc *) stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); + if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + // now go ahead and resample + for (j=0; j < z->s->img_y; ++j) { + stbi_uc *out = output + n * z->s->img_x * j; + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + stbi_uc *y = coutput[0]; + if (z->s->img_n == 3) { + if (is_rgb) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = y[i]; + out[1] = coutput[1][i]; + out[2] = coutput[2][i]; + out[3] = 255; + out += n; + } + } else { + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else if (z->s->img_n == 4) { + if (z->app14_color_transform == 0) { // CMYK + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(coutput[0][i], m); + out[1] = stbi__blinn_8x8(coutput[1][i], m); + out[2] = stbi__blinn_8x8(coutput[2][i], m); + out[3] = 255; + out += n; + } + } else if (z->app14_color_transform == 2) { // YCCK + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(255 - out[0], m); + out[1] = stbi__blinn_8x8(255 - out[1], m); + out[2] = stbi__blinn_8x8(255 - out[2], m); + out += n; + } + } else { // YCbCr + alpha? Ignore the fourth channel for now + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } + } else + for (i=0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + if (is_rgb) { + if (n == 1) + for (i=0; i < z->s->img_x; ++i) + *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + else { + for (i=0; i < z->s->img_x; ++i, out += 2) { + out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); + out[1] = 255; + } + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 0) { + for (i=0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); + stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); + stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); + out[0] = stbi__compute_y(r, g, b); + out[1] = 255; + out += n; + } + } else if (z->s->img_n == 4 && z->app14_color_transform == 2) { + for (i=0; i < z->s->img_x; ++i) { + out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); + out[1] = 255; + out += n; + } + } else { + stbi_uc *y = coutput[0]; + if (n == 1) + for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; + else + for (i=0; i < z->s->img_x; ++i) { *out++ = y[i]; *out++ = 255; } + } + } + } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output + return output; + } +} + +static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + unsigned char* result; + stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__errpuc("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + STBI_NOTUSED(ri); + j->s = s; + stbi__setup_jpeg(j); + result = load_jpeg_image(j, x,y,comp,req_comp); + STBI_FREE(j); + return result; +} + +static int stbi__jpeg_test(stbi__context *s) +{ + int r; + stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); + if (!j) return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + stbi__setup_jpeg(j); + r = stbi__decode_jpeg_header(j, STBI__SCAN_type); + stbi__rewind(s); + STBI_FREE(j); + return r; +} + +static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) +{ + if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { + stbi__rewind( j->s ); + return 0; + } + if (x) *x = j->s->img_x; + if (y) *y = j->s->img_y; + if (comp) *comp = j->s->img_n >= 3 ? 3 : 1; + return 1; +} + +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) +{ + int result; + stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); + if (!j) return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); + j->s = s; + result = stbi__jpeg_info_raw(j, x, y, comp); + STBI_FREE(j); + return result; +} +#endif + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +#ifndef STBI_NO_ZLIB + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) +#define STBI__ZNSYMS 288 // number of symbols in literal/length alphabet + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct +{ + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[STBI__ZNSYMS]; + stbi__uint16 value[STBI__ZNSYMS]; +} stbi__zhuffman; + +stbi_inline static int stbi__bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +stbi_inline static int stbi__bit_reverse(int v, int bits) +{ + STBI_ASSERT(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16-bits); +} + +static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, int num) +{ + int i,k=0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 0, sizeof(z->fast)); + for (i=0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i=1; i < 16; ++i) + if (sizes[i] > (1 << i)) + return stbi__err("bad sizes", "Corrupt PNG"); + code = 0; + for (i=1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16) code; + z->firstsymbol[i] = (stbi__uint16) k; + code = (code + sizes[i]); + if (sizes[i]) + if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG"); + z->maxcode[i] = code << (16-i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i=0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i); + z->size [c] = (stbi_uc ) s; + z->value[c] = (stbi__uint16) i; + if (s <= STBI__ZFAST_BITS) { + int j = stbi__bit_reverse(next_code[s],s); + while (j < (1 << STBI__ZFAST_BITS)) { + z->fast[j] = fastv; + j += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct +{ + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + int hit_zeof_once; + stbi__uint32 code_buffer; + + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; + + stbi__zhuffman z_length, z_distance; +} stbi__zbuf; + +stbi_inline static int stbi__zeof(stbi__zbuf *z) +{ + return (z->zbuffer >= z->zbuffer_end); +} + +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) +{ + return stbi__zeof(z) ? 0 : *z->zbuffer++; +} + +static void stbi__fill_bits(stbi__zbuf *z) +{ + do { + if (z->code_buffer >= (1U << z->num_bits)) { + z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ + return; + } + z->code_buffer |= (unsigned int) stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) +{ + unsigned int k; + if (z->num_bits < n) stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s,k; + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s=STBI__ZFAST_BITS+1; ; ++s) + if (k < z->maxcode[s]) + break; + if (s >= 16) return -1; // invalid code! + // code size is s, so: + b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; + if (b >= STBI__ZNSYMS) return -1; // some data was corrupt somewhere! + if (z->size[b] != s) return -1; // was originally an assert, but report failure instead. + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s; + if (a->num_bits < 16) { + if (stbi__zeof(a)) { + if (!a->hit_zeof_once) { + // This is the first time we hit eof, insert 16 extra padding btis + // to allow us to keep going; if we actually consume any of them + // though, that is invalid data. This is caught later. + a->hit_zeof_once = 1; + a->num_bits += 16; // add 16 implicit zero bits + } else { + // We already inserted our extra 16 padding bits and are again + // out, this stream is actually prematurely terminated. + return -1; + } + } else { + stbi__fill_bits(a); + } + } + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes +{ + char *q; + unsigned int cur, limit, old_limit; + z->zout = zout; + if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); + cur = (unsigned int) (z->zout - z->zout_start); + limit = old_limit = (unsigned) (z->zout_end - z->zout_start); + if (UINT_MAX - cur < (unsigned) n) return stbi__err("outofmem", "Out of memory"); + while (cur + n > limit) { + if(limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); + limit *= 2; + } + q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); + if (q == NULL) return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static const int stbi__zlength_base[31] = { + 3,4,5,6,7,8,9,10,11,13, + 15,17,19,23,27,31,35,43,51,59, + 67,83,99,115,131,163,195,227,258,0,0 }; + +static const int stbi__zlength_extra[31]= +{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + +static const int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, +257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + +static const int stbi__zdist_extra[32] = +{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static int stbi__parse_huffman_block(stbi__zbuf *a) +{ + char *zout = a->zout; + for(;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) return 0; + zout = a->zout; + } + *zout++ = (char) z; + } else { + stbi_uc *p; + int len,dist; + if (z == 256) { + a->zout = zout; + if (a->hit_zeof_once && a->num_bits < 16) { + // The first time we hit zeof, we inserted 16 extra zero bits into our bit + // buffer so the decoder can just do its speculative decoding. But if we + // actually consumed any of those bits (which is the case when num_bits < 16), + // the stream actually read past the end so it is malformed. + return stbi__err("unexpected end","Corrupt PNG"); + } + return 1; + } + if (z >= 286) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not appear in compressed data + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0 || z >= 30) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, distance codes 30 and 31 must not appear in compressed data + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); + if (len > a->zout_end - zout) { + if (!stbi__zexpand(a, zout, len)) return 0; + zout = a->zout; + } + p = (stbi_uc *) (zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { do *zout++ = v; while (--len); } + } else { + if (len) { do *zout++ = *p++; while (--len); } + } + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf *a) +{ + static const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286+32+137];//padding for maximum single op + stbi_uc codelength_sizes[19]; + int i,n; + + int hlit = stbi__zreceive(a,5) + 257; + int hdist = stbi__zreceive(a,5) + 1; + int hclen = stbi__zreceive(a,4) + 4; + int ntot = hlit + hdist; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i=0; i < hclen; ++i) { + int s = stbi__zreceive(a,3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < ntot) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc) c; + else { + stbi_uc fill = 0; + if (c == 16) { + c = stbi__zreceive(a,2)+3; + if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); + fill = lencodes[n-1]; + } else if (c == 17) { + c = stbi__zreceive(a,3)+3; + } else if (c == 18) { + c = stbi__zreceive(a,7)+11; + } else { + return stbi__err("bad codelengths", "Corrupt PNG"); + } + if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); + memset(lencodes+n, fill, c); + n += c; + } + } + if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; + return 1; +} + +static int stbi__parse_uncompressed_block(stbi__zbuf *a) +{ + stbi_uc header[4]; + int len,nlen,k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + if (a->num_bits < 0) return stbi__err("zlib corrupt","Corrupt PNG"); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf *a) +{ + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if (stbi__zeof(a)) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +static const stbi_uc stbi__zdefault_length[STBI__ZNSYMS] = +{ + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8 +}; +static const stbi_uc stbi__zdefault_distance[32] = +{ + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 +}; +/* +Init algorithm: +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; + for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; + for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; + for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; + + for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; +} +*/ + +static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) +{ + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) return 0; + a->num_bits = 0; + a->code_buffer = 0; + a->hit_zeof_once = 0; + do { + final = stbi__zreceive(a,1); + type = stbi__zreceive(a,2); + if (type == 0) { + if (!stbi__parse_uncompressed_block(a)) return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , STBI__ZNSYMS)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; + } else { + if (!stbi__compute_huffman_codes(a)) return 0; + } + if (!stbi__parse_huffman_block(a)) return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(16384); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer+len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int) (a.zout - a.zout_start); + else + return -1; +} +#endif + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + +#ifndef STBI_NO_PNG +typedef struct +{ + stbi__uint32 length; + stbi__uint32 type; +} stbi__pngchunk; + +static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) +{ + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; +} + +static int stbi__check_png_header(stbi__context *s) +{ + static const stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; + int i; + for (i=0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); + return 1; +} + +typedef struct +{ + stbi__context *s; + stbi_uc *idata, *expanded, *out; + int depth; +} stbi__png; + + +enum { + STBI__F_none=0, + STBI__F_sub=1, + STBI__F_up=2, + STBI__F_avg=3, + STBI__F_paeth=4, + // synthetic filter used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first +}; + +static stbi_uc first_row_filter[5] = +{ + STBI__F_none, + STBI__F_sub, + STBI__F_none, + STBI__F_avg_first, + STBI__F_sub // Paeth with b=c=0 turns out to be equivalent to sub +}; + +static int stbi__paeth(int a, int b, int c) +{ + // This formulation looks very different from the reference in the PNG spec, but is + // actually equivalent and has favorable data dependencies and admits straightforward + // generation of branch-free code, which helps performance significantly. + int thresh = c*3 - (a + b); + int lo = a < b ? a : b; + int hi = a < b ? b : a; + int t0 = (hi <= thresh) ? lo : c; + int t1 = (thresh <= lo) ? hi : t0; + return t1; +} + +static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; + +// adds an extra all-255 alpha channel +// dest == src is legal +// img_n must be 1 or 3 +static void stbi__create_png_alpha_expand8(stbi_uc *dest, stbi_uc *src, stbi__uint32 x, int img_n) +{ + int i; + // must process data backwards since we allow dest==src + if (img_n == 1) { + for (i=x-1; i >= 0; --i) { + dest[i*2+1] = 255; + dest[i*2+0] = src[i]; + } + } else { + STBI_ASSERT(img_n == 3); + for (i=x-1; i >= 0; --i) { + dest[i*4+3] = 255; + dest[i*4+2] = src[i*3+2]; + dest[i*4+1] = src[i*3+1]; + dest[i*4+0] = src[i*3+0]; + } + } +} + +// create the png data from post-deflated data +static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) +{ + int bytes = (depth == 16 ? 2 : 1); + stbi__context *s = a->s; + stbi__uint32 i,j,stride = x*out_n*bytes; + stbi__uint32 img_len, img_width_bytes; + stbi_uc *filter_buf; + int all_ok = 1; + int k; + int img_n = s->img_n; // copy it into a local for later + + int output_bytes = out_n*bytes; + int filter_bytes = img_n*bytes; + int width = x; + + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); + a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into + if (!a->out) return stbi__err("outofmem", "Out of memory"); + + // note: error exits here don't need to clean up a->out individually, + // stbi__do_png always does on error. + if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); + img_width_bytes = (((img_n * x * depth) + 7) >> 3); + if (!stbi__mad2sizes_valid(img_width_bytes, y, img_width_bytes)) return stbi__err("too large", "Corrupt PNG"); + img_len = (img_width_bytes + 1) * y; + + // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, + // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), + // so just check for raw_len < img_len always. + if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); + + // Allocate two scan lines worth of filter workspace buffer. + filter_buf = (stbi_uc *) stbi__malloc_mad2(img_width_bytes, 2, 0); + if (!filter_buf) return stbi__err("outofmem", "Out of memory"); + + // Filtering for low-bit-depth images + if (depth < 8) { + filter_bytes = 1; + width = img_width_bytes; + } + + for (j=0; j < y; ++j) { + // cur/prior filter buffers alternate + stbi_uc *cur = filter_buf + (j & 1)*img_width_bytes; + stbi_uc *prior = filter_buf + (~j & 1)*img_width_bytes; + stbi_uc *dest = a->out + stride*j; + int nk = width * filter_bytes; + int filter = *raw++; + + // check filter type + if (filter > 4) { + all_ok = stbi__err("invalid filter","Corrupt PNG"); + break; + } + + // if first row, use special filter that doesn't sample previous row + if (j == 0) filter = first_row_filter[filter]; + + // perform actual filtering + switch (filter) { + case STBI__F_none: + memcpy(cur, raw, nk); + break; + case STBI__F_sub: + memcpy(cur, raw, filter_bytes); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); + break; + case STBI__F_up: + for (k = 0; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); + break; + case STBI__F_avg: + for (k = 0; k < filter_bytes; ++k) + cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); + break; + case STBI__F_paeth: + for (k = 0; k < filter_bytes; ++k) + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); // prior[k] == stbi__paeth(0,prior[k],0) + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes], prior[k], prior[k-filter_bytes])); + break; + case STBI__F_avg_first: + memcpy(cur, raw, filter_bytes); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); + break; + } + + raw += nk; + + // expand decoded bits in cur to dest, also adding an extra alpha channel if desired + if (depth < 8) { + stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range + stbi_uc *in = cur; + stbi_uc *out = dest; + stbi_uc inb = 0; + stbi__uint32 nsmp = x*img_n; + + // expand bits to bytes first + if (depth == 4) { + for (i=0; i < nsmp; ++i) { + if ((i & 1) == 0) inb = *in++; + *out++ = scale * (inb >> 4); + inb <<= 4; + } + } else if (depth == 2) { + for (i=0; i < nsmp; ++i) { + if ((i & 3) == 0) inb = *in++; + *out++ = scale * (inb >> 6); + inb <<= 2; + } + } else { + STBI_ASSERT(depth == 1); + for (i=0; i < nsmp; ++i) { + if ((i & 7) == 0) inb = *in++; + *out++ = scale * (inb >> 7); + inb <<= 1; + } + } + + // insert alpha=255 values if desired + if (img_n != out_n) + stbi__create_png_alpha_expand8(dest, dest, x, img_n); + } else if (depth == 8) { + if (img_n == out_n) + memcpy(dest, cur, x*img_n); + else + stbi__create_png_alpha_expand8(dest, cur, x, img_n); + } else if (depth == 16) { + // convert the image data from big-endian to platform-native + stbi__uint16 *dest16 = (stbi__uint16*)dest; + stbi__uint32 nsmp = x*img_n; + + if (img_n == out_n) { + for (i = 0; i < nsmp; ++i, ++dest16, cur += 2) + *dest16 = (cur[0] << 8) | cur[1]; + } else { + STBI_ASSERT(img_n+1 == out_n); + if (img_n == 1) { + for (i = 0; i < x; ++i, dest16 += 2, cur += 2) { + dest16[0] = (cur[0] << 8) | cur[1]; + dest16[1] = 0xffff; + } + } else { + STBI_ASSERT(img_n == 3); + for (i = 0; i < x; ++i, dest16 += 4, cur += 6) { + dest16[0] = (cur[0] << 8) | cur[1]; + dest16[1] = (cur[2] << 8) | cur[3]; + dest16[2] = (cur[4] << 8) | cur[5]; + dest16[3] = 0xffff; + } + } + } + } + } + + STBI_FREE(filter_buf); + if (!all_ok) return 0; + + return 1; +} + +static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) +{ + int bytes = (depth == 16 ? 2 : 1); + int out_bytes = out_n * bytes; + stbi_uc *final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); + + // de-interlacing + final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); + if (!final) return stbi__err("outofmem", "Out of memory"); + for (p=0; p < 7; ++p) { + int xorig[] = { 0,4,0,2,0,1,0 }; + int yorig[] = { 0,0,4,0,2,0,1 }; + int xspc[] = { 8,8,4,4,2,2,1 }; + int yspc[] = { 8,8,8,4,4,2,2 }; + int i,j,x,y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; + if (x && y) { + stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; + if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { + STBI_FREE(final); + return 0; + } + for (j=0; j < y; ++j) { + for (i=0; i < x; ++i) { + int out_y = j*yspc[p]+yorig[p]; + int out_x = i*xspc[p]+xorig[p]; + memcpy(final + out_y*a->s->img_x*out_bytes + out_x*out_bytes, + a->out + (j*x+i)*out_bytes, out_bytes); + } + } + STBI_FREE(a->out); + image_data += img_len; + image_data_len -= img_len; + } + } + a->out = final; + + return 1; +} + +static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i=0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i=0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi__uint16 *p = (stbi__uint16*) z->out; + + // compute color-based transparency, assuming we've + // already got 65535 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 65535); + p += 2; + } + } else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) +{ + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; + + p = (stbi_uc *) stbi__malloc_mad2(pixel_count, pal_img_n, 0); + if (p == NULL) return stbi__err("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p += 3; + } + } else { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p[3] = palette[n+3]; + p += 4; + } + } + STBI_FREE(a->out); + a->out = temp_out; + + STBI_NOTUSED(len); + + return 1; +} + +static int stbi__unpremultiply_on_load_global = 0; +static int stbi__de_iphone_flag_global = 0; + +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_global = flag_true_if_should_convert; +} + +#ifndef STBI_THREAD_LOCAL +#define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global +#define stbi__de_iphone_flag stbi__de_iphone_flag_global +#else +static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, stbi__unpremultiply_on_load_set; +static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, stbi__de_iphone_flag_set; + +STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; + stbi__unpremultiply_on_load_set = 1; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag_local = flag_true_if_should_convert; + stbi__de_iphone_flag_set = 1; +} + +#define stbi__unpremultiply_on_load (stbi__unpremultiply_on_load_set \ + ? stbi__unpremultiply_on_load_local \ + : stbi__unpremultiply_on_load_global) +#define stbi__de_iphone_flag (stbi__de_iphone_flag_set \ + ? stbi__de_iphone_flag_local \ + : stbi__de_iphone_flag_global) +#endif // STBI_THREAD_LOCAL + +static void stbi__de_iphone(stbi__png *z) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i=0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + stbi_uc half = a / 2; + p[0] = (p[2] * 255 + half) / a; + p[1] = (p[1] * 255 + half) / a; + p[2] = ( t * 255 + half) / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +#define STBI__PNG_TYPE(a,b,c,d) (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d)) + +static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) +{ + stbi_uc palette[1024], pal_img_n=0; + stbi_uc has_trans=0, tc[3]={0}; + stbi__uint16 tc16[3]; + stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; + int first=1,k,interlace=0, color=0, is_iphone=0; + stbi__context *s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) return 0; + + if (scan == STBI__SCAN_type) return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C','g','B','I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I','H','D','R'): { + int comp,filter; + if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); + first = 0; + if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); + s->img_x = stbi__get32be(s); + s->img_y = stbi__get32be(s); + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); + color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); + comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); + filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); + interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); + if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); + } + // even with SCAN_header, have to scan to see if we have a tRNS + break; + } + + case STBI__PNG_TYPE('P','L','T','E'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); + for (i=0; i < pal_len; ++i) { + palette[i*4+0] = stbi__get8(s); + palette[i*4+1] = stbi__get8(s); + palette[i*4+2] = stbi__get8(s); + palette[i*4+3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t','R','N','S'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } + if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); + if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); + pal_img_n = 4; + for (i=0; i < c.length; ++i) + palette[i*4+3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); + if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); + has_trans = 1; + // non-paletted with tRNS = constant alpha. if header-scanning, we can stop now. + if (scan == STBI__SCAN_header) { ++s->img_n; return 1; } + if (z->depth == 16) { + for (k = 0; k < s->img_n && k < 3; ++k) // extra loop test to suppress false GCC warning + tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is + } else { + for (k = 0; k < s->img_n && k < 3; ++k) + tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger + } + } + break; + } + + case STBI__PNG_TYPE('I','D','A','T'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); + if (scan == STBI__SCAN_header) { + // header scan definitely stops at first IDAT + if (pal_img_n) + s->img_n = pal_img_n; + return 1; + } + if (c.length > (1u << 30)) return stbi__err("IDAT size limit", "IDAT section larger than 2^30 bytes"); + if ((int)(ioff + c.length) < (int)ioff) return 0; + if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; + stbi_uc *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I','E','N','D'): { + stbi__uint32 raw_len, bpl; + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) return 1; + if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; + z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); + if (z->expanded == NULL) return 0; // zlib should set error + STBI_FREE(z->idata); z->idata = NULL; + if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n+1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; + } else { + if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + } + } + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } else if (has_trans) { + // non-paletted image with tRNS -> source image has (constant) alpha + ++s->img_n; + } + STBI_FREE(z->expanded); z->expanded = NULL; + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + return 1; + } + + default: + // if critical, fail + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { + #ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); + #endif + return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri) +{ + void *result=NULL; + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth <= 8) + ri->bits_per_channel = 8; + else if (p->depth == 16) + ri->bits_per_channel = 16; + else + return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + if (ri->bits_per_channel == 8) + result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + else + result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) *n = p->s->img_n; + } + STBI_FREE(p->out); p->out = NULL; + STBI_FREE(p->expanded); p->expanded = NULL; + STBI_FREE(p->idata); p->idata = NULL; + + return result; +} + +static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x,y,comp,req_comp, ri); +} + +static int stbi__png_test(stbi__context *s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) +{ + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind( p->s ); + return 0; + } + if (x) *x = p->s->img_x; + if (y) *y = p->s->img_y; + if (comp) *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} + +static int stbi__png_is16(stbi__context *s) +{ + stbi__png p; + p.s = s; + if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) + return 0; + if (p.depth != 16) { + stbi__rewind(p.s); + return 0; + } + return 1; +} +#endif + +// Microsoft/Windows BMP image + +#ifndef STBI_NO_BMP +static int stbi__bmp_test_raw(stbi__context *s) +{ + int r; + int sz; + if (stbi__get8(s) != 'B') return 0; + if (stbi__get8(s) != 'M') return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context *s) +{ + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) +{ + int n=0; + if (z == 0) return -1; + if (z >= 0x10000) { n += 16; z >>= 16; } + if (z >= 0x00100) { n += 8; z >>= 8; } + if (z >= 0x00010) { n += 4; z >>= 4; } + if (z >= 0x00004) { n += 2; z >>= 2; } + if (z >= 0x00002) { n += 1;/* >>= 1;*/ } + return n; +} + +static int stbi__bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +// extract an arbitrarily-aligned N-bit value (N=bits) +// from v, and then make it 8-bits long and fractionally +// extend it to full full range. +static int stbi__shiftsigned(unsigned int v, int shift, int bits) +{ + static unsigned int mul_table[9] = { + 0, + 0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/, + 0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/, + }; + static unsigned int shift_table[9] = { + 0, 0,0,1,0,2,4,6,0, + }; + if (shift < 0) + v <<= -shift; + else + v >>= shift; + STBI_ASSERT(v < 256); + v >>= (8-bits); + STBI_ASSERT(bits >= 0 && bits <= 8); + return (int) ((unsigned) v * mul_table[bits]) >> shift_table[bits]; +} + +typedef struct +{ + int bpp, offset, hsz; + unsigned int mr,mg,mb,ma, all_a; + int extra_read; +} stbi__bmp_data; + +static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress) +{ + // BI_BITFIELDS specifies masks explicitly, don't override + if (compress == 3) + return 1; + + if (compress == 0) { + if (info->bpp == 16) { + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; + } else if (info->bpp == 32) { + info->mr = 0xffu << 16; + info->mg = 0xffu << 8; + info->mb = 0xffu << 0; + info->ma = 0xffu << 24; + info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 + } else { + // otherwise, use defaults, which is all-0 + info->mr = info->mg = info->mb = info->ma = 0; + } + return 1; + } + return 0; // error +} + +static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) +{ + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + info->offset = stbi__get32le(s); + info->hsz = hsz = stbi__get32le(s); + info->mr = info->mg = info->mb = info->ma = 0; + info->extra_read = 14; + + if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); + + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); + info->bpp = stbi__get16le(s); + if (hsz != 12) { + int compress = stbi__get32le(s); + if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); + if (compress >= 4) return stbi__errpuc("BMP JPEG/PNG", "BMP type not supported: unsupported compression"); // this includes PNG/JPEG modes + if (compress == 3 && info->bpp != 16 && info->bpp != 32) return stbi__errpuc("bad BMP", "bad BMP"); // bitfields requires 16 or 32 bits/pixel + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (info->bpp == 16 || info->bpp == 32) { + if (compress == 0) { + stbi__bmp_set_mask_defaults(info, compress); + } else if (compress == 3) { + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->extra_read += 12; + // not documented, but generated by photoshop and handled by mspaint + if (info->mr == info->mg && info->mg == info->mb) { + // ?!?!? + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else { + // V4/V5 header + int i; + if (hsz != 108 && hsz != 124) + return stbi__errpuc("bad BMP", "bad BMP"); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->ma = stbi__get32le(s); + if (compress != 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs + stbi__bmp_set_mask_defaults(info, compress); + stbi__get32le(s); // discard color space + for (i=0; i < 12; ++i) + stbi__get32le(s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le(s); // discard offset of profile data + stbi__get32le(s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + } + return (void *) 1; +} + + +static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + unsigned int mr=0,mg=0,mb=0,ma=0, all_a; + stbi_uc pal[256][4]; + int psize=0,i,j,width; + int flip_vertically, pad, target; + stbi__bmp_data info; + STBI_NOTUSED(ri); + + info.all_a = 255; + if (stbi__bmp_parse_header(s, &info) == NULL) + return NULL; // error code already set + + flip_vertically = ((int) s->img_y) > 0; + s->img_y = abs((int) s->img_y); + + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + mr = info.mr; + mg = info.mg; + mb = info.mb; + ma = info.ma; + all_a = info.all_a; + + if (info.hsz == 12) { + if (info.bpp < 24) + psize = (info.offset - info.extra_read - 24) / 3; + } else { + if (info.bpp < 16) + psize = (info.offset - info.extra_read - info.hsz) >> 2; + } + if (psize == 0) { + // accept some number of extra bytes after the header, but if the offset points either to before + // the header ends or implies a large amount of extra data, reject the file as malformed + int bytes_read_so_far = s->callback_already_read + (int)(s->img_buffer - s->img_buffer_original); + int header_limit = 1024; // max we actually read is below 256 bytes currently. + int extra_data_limit = 256*4; // what ordinarily goes here is a palette; 256 entries*4 bytes is its max size. + if (bytes_read_so_far <= 0 || bytes_read_so_far > header_limit) { + return stbi__errpuc("bad header", "Corrupt BMP"); + } + // we established that bytes_read_so_far is positive and sensible. + // the first half of this test rejects offsets that are either too small positives, or + // negative, and guarantees that info.offset >= bytes_read_so_far > 0. this in turn + // ensures the number computed in the second half of the test can't overflow. + if (info.offset < bytes_read_so_far || info.offset - bytes_read_so_far > extra_data_limit) { + return stbi__errpuc("bad offset", "Corrupt BMP"); + } else { + stbi__skip(s, info.offset - bytes_read_so_far); + } + } + + if (info.bpp == 24 && ma == 0xff000000) + s->img_n = 3; + else + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + + // sanity-check size + if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "Corrupt BMP"); + + out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (info.bpp < 16) { + int z=0; + if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } + for (i=0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (info.hsz != 12) stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 1) width = (s->img_x + 7) >> 3; + else if (info.bpp == 4) width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) width = s->img_x; + else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } + pad = (-width)&3; + if (info.bpp == 1) { + for (j=0; j < (int) s->img_y; ++j) { + int bit_offset = 7, v = stbi__get8(s); + for (i=0; i < (int) s->img_x; ++i) { + int color = (v>>bit_offset)&0x1; + out[z++] = pal[color][0]; + out[z++] = pal[color][1]; + out[z++] = pal[color][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + if((--bit_offset) < 0) { + bit_offset = 7; + v = stbi__get8(s); + } + } + stbi__skip(s, pad); + } + } else { + for (j=0; j < (int) s->img_y; ++j) { + for (i=0; i < (int) s->img_x; i += 2) { + int v=stbi__get8(s),v2=0; + if (info.bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + v = (info.bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + stbi__skip(s, pad); + } + } + } else { + int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; + int z = 0; + int easy=0; + stbi__skip(s, info.offset - info.extra_read - info.hsz); + if (info.bpp == 24) width = 3 * s->img_x; + else if (info.bpp == 16) width = 2*s->img_x; + else /* bpp = 32 and pad = 0 */ width=0; + pad = (-width) & 3; + if (info.bpp == 24) { + easy = 1; + } else if (info.bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); + if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + } + for (j=0; j < (int) s->img_y; ++j) { + if (easy) { + for (i=0; i < (int) s->img_x; ++i) { + unsigned char a; + out[z+2] = stbi__get8(s); + out[z+1] = stbi__get8(s); + out[z+0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + all_a |= a; + if (target == 4) out[z++] = a; + } + } else { + int bpp = info.bpp; + for (i=0; i < (int) s->img_x; ++i) { + stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); + unsigned int a; + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + all_a |= a; + if (target == 4) out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + + // if alpha channel is all 0s, replace with all 255s + if (target == 4 && all_a == 0) + for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) + out[i] = 255; + + if (flip_vertically) { + stbi_uc t; + for (j=0; j < (int) s->img_y>>1; ++j) { + stbi_uc *p1 = out + j *s->img_x*target; + stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; + for (i=0; i < (int) s->img_x*target; ++i) { + t = p1[i]; p1[i] = p2[i]; p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + return out; +} +#endif + +// Targa Truevision - TGA +// by Jonathan Dummer +#ifndef STBI_NO_TGA +// returns STBI_rgb or whatever, 0 on error +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) +{ + // only RGB or RGBA (incl. 16bit) or grey allowed + if (is_rgb16) *is_rgb16 = 0; + switch(bits_per_pixel) { + case 8: return STBI_grey; + case 16: if(is_grey) return STBI_grey_alpha; + // fallthrough + case 15: if(is_rgb16) *is_rgb16 = 1; + return STBI_rgb; + case 24: // fallthrough + case 32: return bits_per_pixel/8; + default: return 0; + } +} + +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) +{ + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; + int sz, tga_colormap_type; + stbi__get8(s); // discard Offset + tga_colormap_type = stbi__get8(s); // colormap type + if( tga_colormap_type > 1 ) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + tga_image_type = stbi__get8(s); // image type + if ( tga_colormap_type == 1 ) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { + stbi__rewind(s); + return 0; + } + stbi__skip(s,4); // skip image x and y origin + tga_colormap_bpp = sz; + } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip(s,9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; + } + tga_w = stbi__get16le(s); + if( tga_w < 1 ) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if( tga_h < 1 ) { + stbi__rewind(s); + return 0; // test height + } + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the indexes + // I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } else { + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); + } + if(!tga_comp) { + stbi__rewind(s); + return 0; + } + if (x) *x = tga_w; + if (y) *y = tga_h; + if (comp) *comp = tga_comp; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context *s) +{ + int res = 0; + int sz, tga_color_type; + stbi__get8(s); // discard Offset + tga_color_type = stbi__get8(s); // color type + if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if ( tga_color_type == 1 ) { // colormapped (paletted) image + if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip(s,4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + stbi__skip(s,4); // skip image x and y origin + } else { // "normal" image w/o colormap + if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip(s,9); // skip colormap specification and image x/y origin + } + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width + if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height + sz = stbi__get8(s); // bits per pixel + if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index + if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; + + res = 1; // if we got this far, everything's good and we can return 1 instead of 0 + +errorEnd: + stbi__rewind(s); + return res; +} + +// read 16bit value and convert to 24bit RGB +static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) +{ + stbi__uint16 px = (stbi__uint16)stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later + out[0] = (stbi_uc)((r * 255)/31); + out[1] = (stbi_uc)((g * 255)/31); + out[2] = (stbi_uc)((b * 255)/31); + + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. +} + +static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp, tga_rgb16=0; + int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4] = {0}; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + STBI_NOTUSED(ri); + STBI_NOTUSED(tga_x_origin); // @TODO + STBI_NOTUSED(tga_y_origin); // @TODO + + if (tga_height > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (tga_width > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // do a tiny bit of precessing + if ( tga_image_type >= 8 ) + { + tga_image_type -= 8; + tga_is_RLE = 1; + } + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // If I'm paletted, then I'll use the number of bits from the palette + if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); + + if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency + return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) *comp = tga_comp; + + if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) + return stbi__errpuc("too large", "Corrupt TGA"); + + tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); + if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset ); + + if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { + for (i=0; i < tga_height; ++i) { + int row = tga_inverted ? tga_height -i - 1 : i; + stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } else { + // do I need to load a palette? + if ( tga_indexed) + { + if (tga_palette_len == 0) { /* you have to have at least one entry! */ + STBI_FREE(tga_data); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start ); + // load the palette + tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (tga_rgb16) { + stbi_uc *pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i=0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i=0; i < tga_width * tga_height; ++i) + { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if ( tga_is_RLE ) + { + if ( RLE_count == 0 ) + { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if ( !RLE_repeating ) + { + read_next_pixel = 1; + } + } else + { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if ( read_next_pixel ) + { + // load however much data we did have + if ( tga_indexed ) + { + // read in index, then perform the lookup + int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); + if ( pal_idx >= tga_palette_len ) { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = tga_palette[pal_idx+j]; + } + } else if(tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } else { + // read in the data raw + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i*tga_comp+j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if ( tga_inverted ) + { + for (j = 0; j*2 < tga_height; ++j) + { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) + { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if ( tga_palette != NULL ) + { + STBI_FREE( tga_palette ); + } + } + + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) + { + unsigned char* tga_pixel = tga_data; + for (i=0; i < tga_width * tga_height; ++i) + { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = + tga_x_origin = tga_y_origin = 0; + STBI_NOTUSED(tga_palette_start); + // OK, done + return tga_data; +} +#endif + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s) +{ + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) +{ + int count, nleft, len; + + count = 0; + while ((nleft = pixelCount - count) > 0) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + if (len > nleft) return 0; // corrupt data + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len = 257 - len; + if (len > nleft) return 0; // corrupt data + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + + return 1; +} + +static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) +{ + int pixelCount; + int channelCount, compression; + int channel, i; + int bitdepth; + int w,h; + stbi_uc *out; + STBI_NOTUSED(ri); + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6 ); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + if (h > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (w > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + // Make sure the depth is 8 bits. + bitdepth = stbi__get16be(s); + if (bitdepth != 8 && bitdepth != 16) + return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + stbi__skip(s,stbi__get32be(s) ); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s) ); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s) ); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", "PSD has an unknown compression format"); + + // Check size + if (!stbi__mad3sizes_valid(4, w, h, 0)) + return stbi__errpuc("too large", "Corrupt PSD"); + + // Create the destination image. + + if (!compression && bitdepth == 16 && bpc == 16) { + out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0); + ri->bits_per_channel = 16; + } else + out = (stbi_uc *) stbi__malloc(4 * w*h); + + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w*h; + + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, + // which we're going to just skip. + stbi__skip(s, h * channelCount * 2 ); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out+channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = (channel == 3 ? 255 : 0); + } else { + // Read the RLE data. + if (!stbi__psd_decode_rle(s, p, pixelCount)) { + STBI_FREE(out); + return stbi__errpuc("corrupt", "bad RLE data"); + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + if (channel >= channelCount) { + // Fill this channel with default data. + if (bitdepth == 16 && bpc == 16) { + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + stbi__uint16 val = channel == 3 ? 65535 : 0; + for (i = 0; i < pixelCount; i++, q += 4) + *q = val; + } else { + stbi_uc *p = out+channel; + stbi_uc val = channel == 3 ? 255 : 0; + for (i = 0; i < pixelCount; i++, p += 4) + *p = val; + } + } else { + if (ri->bits_per_channel == 16) { // output bpc + stbi__uint16 *q = ((stbi__uint16 *) out) + channel; + for (i = 0; i < pixelCount; i++, q += 4) + *q = (stbi__uint16) stbi__get16be(s); + } else { + stbi_uc *p = out+channel; + if (bitdepth == 16) { // input bpc + for (i = 0; i < pixelCount; i++, p += 4) + *p = (stbi_uc) (stbi__get16be(s) >> 8); + } else { + for (i = 0; i < pixelCount; i++, p += 4) + *p = stbi__get8(s); + } + } + } + } + } + + // remove weird white matte from PSD + if (channelCount >= 4) { + if (ri->bits_per_channel == 16) { + for (i=0; i < w*h; ++i) { + stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i; + if (pixel[3] != 0 && pixel[3] != 65535) { + float a = pixel[3] / 65535.0f; + float ra = 1.0f / a; + float inv_a = 65535.0f * (1 - ra); + pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a); + pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a); + pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a); + } + } + } else { + for (i=0; i < w*h; ++i) { + unsigned char *pixel = out + 4*i; + if (pixel[3] != 0 && pixel[3] != 255) { + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); + pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); + pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); + } + } + } + } + + // convert to desired output format + if (req_comp && req_comp != 4) { + if (ri->bits_per_channel == 16) + out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h); + else + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + if (comp) *comp = 4; + *y = h; + *x = w; + + return out; +} +#endif + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +#ifndef STBI_NO_PIC +static int stbi__pic_is4(stbi__context *s,const char *str) +{ + int i; + for (i=0; i<4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context *s) +{ + int i; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) + return 0; + + for(i=0;i<84;++i) + stbi__get8(s); + + if (!stbi__pic_is4(s,"PICT")) + return 0; + + return 1; +} + +typedef struct +{ + stbi_uc size,type,channel; +} stbi__pic_packet; + +static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) +{ + int mask=0x80, i; + + for (i=0; i<4; ++i, mask>>=1) { + if (channel & mask) { + if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); + dest[i]=stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) +{ + int mask=0x80,i; + + for (i=0;i<4; ++i, mask>>=1) + if (channel&mask) + dest[i]=src[i]; +} + +static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) +{ + int act_comp=0,num_packets=0,y,chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return stbi__errpuc("bad format","too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); + if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for(y=0; ytype) { + default: + return stbi__errpuc("bad format","packet has bad compression type"); + + case 0: {//uncompressed + int x; + + for(x=0;xchannel,dest)) + return 0; + break; + } + + case 1://Pure RLE + { + int left=width, i; + + while (left>0) { + stbi_uc count,value[4]; + + count=stbi__get8(s); + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); + + if (count > left) + count = (stbi_uc) left; + + if (!stbi__readval(s,packet->channel,value)) return 0; + + for(i=0; ichannel,dest,value); + left -= count; + } + } + break; + + case 2: {//Mixed RLE + int left=width; + while (left>0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + + if (count==128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file","scanline overrun"); + + if (!stbi__readval(s,packet->channel,value)) + return 0; + + for(i=0;ichannel,dest,value); + } else { // Raw + ++count; + if (count>left) return stbi__errpuc("bad file","scanline overrun"); + + for(i=0;ichannel,dest)) + return 0; + } + left-=count; + } + break; + } + } + } + } + + return result; +} + +static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri) +{ + stbi_uc *result; + int i, x,y, internal_comp; + STBI_NOTUSED(ri); + + if (!comp) comp = &internal_comp; + + for (i=0; i<92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + + if (y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); + if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode"); + + stbi__get32be(s); //skip `ratio' + stbi__get16be(s); //skip `fields' + stbi__get16be(s); //skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0); + if (!result) return stbi__errpuc("outofmem", "Out of memory"); + memset(result, 0xff, x*y*4); + + if (!stbi__pic_load_core(s,x,y,comp, result)) { + STBI_FREE(result); + result=0; + } + *px = x; + *py = y; + if (req_comp == 0) req_comp = *comp; + result=stbi__convert_format(result,4,req_comp,x,y); + + return result; +} + +static int stbi__pic_test(stbi__context *s) +{ + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; +} +#endif + +// ************************************************************************************************* +// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb + +#ifndef STBI_NO_GIF +typedef struct +{ + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; +} stbi__gif_lzw; + +typedef struct +{ + int w,h; + stbi_uc *out; // output buffer (always 4 components) + stbi_uc *background; // The current "background" as far as a gif is concerned + stbi_uc *history; + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[8192]; + stbi_uc *color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; + int delay; +} stbi__gif; + +static int stbi__gif_test_raw(stbi__context *s) +{ + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') return 0; + if (stbi__get8(s) != 'a') return 0; + return 1; +} + +static int stbi__gif_test(stbi__context *s) +{ + int r = stbi__gif_test_raw(s); + stbi__rewind(s); + return r; +} + +static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) +{ + int i; + for (i=0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp == i ? 0 : 255; + } +} + +static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) +{ + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); + + version = stbi__get8(s); + if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); + + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; + + if (g->w > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + if (g->h > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); + + if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments + + if (is_info) return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); + if (!g) return stbi__err("outofmem", "Out of memory"); + if (!stbi__gif_header(s, g, comp, 1)) { + STBI_FREE(g); + stbi__rewind( s ); + return 0; + } + if (x) *x = g->w; + if (y) *y = g->h; + STBI_FREE(g); + return 1; +} + +static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) +{ + stbi_uc *p, *c; + int idx; + + // recurse to decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) + stbi__out_gif_code(g, g->codes[code].prefix); + + if (g->cur_y >= g->max_y) return; + + idx = g->cur_x + g->cur_y; + p = &g->out[idx]; + g->history[idx / 4] = 1; + + c = &g->color_table[g->codes[code].suffix * 4]; + if (c[3] > 128) { // don't render transparent pixels; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) +{ + stbi_uc lzw_cs; + stbi__int32 len, init_code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw *p; + + lzw_cs = stbi__get8(s); + if (lzw_cs > 12) return NULL; + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (init_code = 0; init_code < clear; init_code++) { + g->codes[init_code].prefix = -1; + g->codes[init_code].first = (stbi_uc) init_code; + g->codes[init_code].suffix = (stbi_uc) init_code; + } + + // support no starting clear code + avail = clear+2; + oldcode = -1; + + len = 0; + for(;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) + return g->out; + } + --len; + bits |= (stbi__int32) stbi__get8(s) << valid_bits; + valid_bits += 8; + } else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) + stbi__skip(s,len); + return g->out; + } else if (code <= avail) { + if (first) { + return stbi__errpuc("no clear code", "Corrupt GIF"); + } + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 8192) { + return stbi__errpuc("too many codes", "Corrupt GIF"); + } + + p->prefix = (stbi__int16) oldcode; + p->first = g->codes[oldcode].first; + p->suffix = (code == avail) ? p->first : g->codes[code].first; + } else if (code == avail) + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16) code); + + if ((avail & codemask) == 0 && avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } else { + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + } + } + } +} + +// this function is designed to support animated gifs, although stb_image doesn't support it +// two back is the image from two frames ago, used for a very specific disposal format +static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp, stbi_uc *two_back) +{ + int dispose; + int first_frame; + int pi; + int pcount; + STBI_NOTUSED(req_comp); + + // on first frame, any non-written pixels get the background colour (non-transparent) + first_frame = 0; + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header + if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) + return stbi__errpuc("too large", "GIF image is too large"); + pcount = g->w * g->h; + g->out = (stbi_uc *) stbi__malloc(4 * pcount); + g->background = (stbi_uc *) stbi__malloc(4 * pcount); + g->history = (stbi_uc *) stbi__malloc(pcount); + if (!g->out || !g->background || !g->history) + return stbi__errpuc("outofmem", "Out of memory"); + + // image is treated as "transparent" at the start - ie, nothing overwrites the current background; + // background colour is only used for pixels that are not rendered first frame, after that "background" + // color refers to the color that was there the previous frame. + memset(g->out, 0x00, 4 * pcount); + memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent) + memset(g->history, 0x00, pcount); // pixels that were affected previous frame + first_frame = 1; + } else { + // second frame - how do we dispose of the previous one? + dispose = (g->eflags & 0x1C) >> 2; + pcount = g->w * g->h; + + if ((dispose == 3) && (two_back == 0)) { + dispose = 2; // if I don't have an image to revert back to, default to the old background + } + + if (dispose == 3) { // use previous graphic + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy( &g->out[pi * 4], &two_back[pi * 4], 4 ); + } + } + } else if (dispose == 2) { + // restore what was changed last frame to background before that frame; + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy( &g->out[pi * 4], &g->background[pi * 4], 4 ); + } + } + } else { + // This is a non-disposal case eithe way, so just + // leave the pixels as is, and they will become the new background + // 1: do not dispose + // 0: not specified. + } + + // background is what out is after the undoing of the previou frame; + memcpy( g->background, g->out, 4 * g->w * g->h ); + } + + // clear my history; + memset( g->history, 0x00, g->w * g->h ); // pixels that were affected previous frame + + for (;;) { + int tag = stbi__get8(s); + switch (tag) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc *o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + // if the width of the specified rectangle is 0, that means + // we may not see *any* pixels or the image is malformed; + // to make sure this is caught, move the current y down to + // max_y (which is what out_gif_code checks). + if (w == 0) + g->cur_y = g->max_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = 8 * g->line_size; // first interlaced spacing + g->parse = 3; + } else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); + g->color_table = (stbi_uc *) g->lpal; + } else if (g->flags & 0x80) { + g->color_table = (stbi_uc *) g->pal; + } else + return stbi__errpuc("missing color table", "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (!o) return NULL; + + // if this was the first frame, + pcount = g->w * g->h; + if (first_frame && (g->bgindex > 0)) { + // if first frame, any pixel not drawn to gets the background color + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi] == 0) { + g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; + memcpy( &g->out[pi * 4], &g->pal[g->bgindex], 4 ); + } + } + } + + return o; + } + + case 0x21: // Comment Extension. + { + int len; + int ext = stbi__get8(s); + if (ext == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + g->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths. + + // unset old transparent + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 255; + } + if (g->eflags & 0x01) { + g->transparent = stbi__get8(s); + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 0; + } + } else { + // don't need transparent + stbi__skip(s, 1); + g->transparent = -1; + } + } else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) { + stbi__skip(s, len); + } + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc *) s; // using '1' causes warning on some compilers + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } + } +} + +static void *stbi__load_gif_main_outofmem(stbi__gif *g, stbi_uc *out, int **delays) +{ + STBI_FREE(g->out); + STBI_FREE(g->history); + STBI_FREE(g->background); + + if (out) STBI_FREE(out); + if (delays && *delays) STBI_FREE(*delays); + return stbi__errpuc("outofmem", "Out of memory"); +} + +static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp) +{ + if (stbi__gif_test(s)) { + int layers = 0; + stbi_uc *u = 0; + stbi_uc *out = 0; + stbi_uc *two_back = 0; + stbi__gif g; + int stride; + int out_size = 0; + int delays_size = 0; + + STBI_NOTUSED(out_size); + STBI_NOTUSED(delays_size); + + memset(&g, 0, sizeof(g)); + if (delays) { + *delays = 0; + } + + do { + u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + + if (u) { + *x = g.w; + *y = g.h; + ++layers; + stride = g.w * g.h * 4; + + if (out) { + void *tmp = (stbi_uc*) STBI_REALLOC_SIZED( out, out_size, layers * stride ); + if (!tmp) + return stbi__load_gif_main_outofmem(&g, out, delays); + else { + out = (stbi_uc*) tmp; + out_size = layers * stride; + } + + if (delays) { + int *new_delays = (int*) STBI_REALLOC_SIZED( *delays, delays_size, sizeof(int) * layers ); + if (!new_delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + *delays = new_delays; + delays_size = layers * sizeof(int); + } + } else { + out = (stbi_uc*)stbi__malloc( layers * stride ); + if (!out) + return stbi__load_gif_main_outofmem(&g, out, delays); + out_size = layers * stride; + if (delays) { + *delays = (int*) stbi__malloc( layers * sizeof(int) ); + if (!*delays) + return stbi__load_gif_main_outofmem(&g, out, delays); + delays_size = layers * sizeof(int); + } + } + memcpy( out + ((layers - 1) * stride), u, stride ); + if (layers >= 2) { + two_back = out - 2 * stride; + } + + if (delays) { + (*delays)[layers - 1U] = g.delay; + } + } + } while (u != 0); + + // free temp buffer; + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + + // do the final conversion after loading everything; + if (req_comp && req_comp != 4) + out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); + + *z = layers; + return out; + } else { + return stbi__errpuc("not GIF", "Image was not as a gif type."); + } +} + +static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *u = 0; + stbi__gif g; + memset(&g, 0, sizeof(g)); + STBI_NOTUSED(ri); + + u = stbi__gif_load_next(s, &g, comp, req_comp, 0); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + + // moved conversion to after successful load so that the same + // can be done for multiple frames. + if (req_comp && req_comp != 4) + u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + } else if (g.out) { + // if there was an error and we allocated an image buffer, free it! + STBI_FREE(g.out); + } + + // free buffers needed for multiple frame loading; + STBI_FREE(g.history); + STBI_FREE(g.background); + + return u; +} + +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) +{ + return stbi__gif_info_raw(s,x,y,comp); +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context *s, const char *signature) +{ + int i; + for (i=0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; + stbi__rewind(s); + return 1; +} + +static int stbi__hdr_test(stbi__context* s) +{ + int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); + stbi__rewind(s); + if(!r) { + r = stbi__hdr_test_core(s, "#?RGBE\n"); + stbi__rewind(s); + } + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) +{ + int len=0; + char c = '\0'; + + c = (char) stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN-1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; + } + c = (char) stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) +{ + if ( input[3] != 0 ) { + float f1; + // Exponent + f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: output[3] = 1; /* fallthrough */ + case 3: output[0] = output[1] = output[2] = 0; + break; + case 2: output[1] = 1; /* fallthrough */ + case 1: output[0] = 0; + break; + } + } +} + +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + const char *headerToken; + STBI_NOTUSED(ri); + + // Check identifier + headerToken = stbi__hdr_gettoken(s,buffer); + if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int) strtol(token, NULL, 10); + + if (height > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + if (width > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); + + *x = width; + *y = height; + + if (comp) *comp = 3; + if (req_comp == 0) req_comp = 3; + + if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) + return stbi__errpf("too large", "HDR image is too large"); + + // Read data + hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); + if (!hdr_data) + return stbi__errpf("outofmem", "Out of memory"); + + // Load image data + // image data is stored as some number of sca + if ( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc) c1; + rgbe[1] = (stbi_uc) c2; + rgbe[2] = (stbi_uc) len; + rgbe[3] = (stbi_uc) stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } + if (scanline == NULL) { + scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0); + if (!scanline) { + STBI_FREE(hdr_data); + return stbi__errpf("outofmem", "Out of memory"); + } + } + + for (k = 0; k < 4; ++k) { + int nleft; + i = 0; + while ((nleft = width - i) > 0) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + if ((count == 0) || (count > nleft)) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + if ((count == 0) || (count > nleft)) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i=0; i < width; ++i) + stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); + } + if (scanline) + STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int dummy; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (stbi__hdr_test(s) == 0) { + stbi__rewind( s ); + return 0; + } + + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) { + stbi__rewind( s ); + return 0; + } + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *y = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *x = (int) strtol(token, NULL, 10); + *comp = 3; + return 1; +} +#endif // STBI_NO_HDR + +#ifndef STBI_NO_BMP +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) +{ + void *p; + stbi__bmp_data info; + + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + if (p == NULL) { + stbi__rewind( s ); + return 0; + } + if (x) *x = s->img_x; + if (y) *y = s->img_y; + if (comp) { + if (info.bpp == 24 && info.ma == 0xff000000) + *comp = 3; + else + *comp = info.ma ? 4 : 3; + } + return 1; +} +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) +{ + int channelCount, dummy, depth; + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + depth = stbi__get16be(s); + if (depth != 8 && depth != 16) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind( s ); + return 0; + } + *comp = 4; + return 1; +} + +static int stbi__psd_is16(stbi__context *s) +{ + int channelCount, depth; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + STBI_NOTUSED(stbi__get32be(s)); + STBI_NOTUSED(stbi__get32be(s)); + depth = stbi__get16be(s); + if (depth != 16) { + stbi__rewind( s ); + return 0; + } + return 1; +} +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) +{ + int act_comp=0,num_packets=0,chained,dummy; + stbi__pic_packet packets[10]; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 88); + + *x = stbi__get16be(s); + *y = stbi__get16be(s); + if (stbi__at_eof(s)) { + stbi__rewind( s); + return 0; + } + if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind( s ); + return 0; + } + + stbi__skip(s, 8); + + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind( s ); + return 0; + } + if (packet->size != 8) { + stbi__rewind( s ); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; +} +#endif + +// ************************************************************************************************* +// Portable Gray Map and Portable Pixel Map loader +// by Ken Miller +// +// PGM: http://netpbm.sourceforge.net/doc/pgm.html +// PPM: http://netpbm.sourceforge.net/doc/ppm.html +// +// Known limitations: +// Does not support comments in the header section +// Does not support ASCII image data (formats P2 and P3) + +#ifndef STBI_NO_PNM + +static int stbi__pnm_test(stbi__context *s) +{ + char p, t; + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind( s ); + return 0; + } + return 1; +} + +static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) +{ + stbi_uc *out; + STBI_NOTUSED(ri); + + ri->bits_per_channel = stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n); + if (ri->bits_per_channel == 0) + return 0; + + if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + + if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0)) + return stbi__errpuc("too large", "PNM too large"); + + out = (stbi_uc *) stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (!stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8))) { + STBI_FREE(out); + return stbi__errpuc("bad PNM", "PNM file truncated"); + } + + if (req_comp && req_comp != s->img_n) { + if (ri->bits_per_channel == 16) { + out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, s->img_n, req_comp, s->img_x, s->img_y); + } else { + out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); + } + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) +{ + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char) stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') + break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) + *c = (char) stbi__get8(s); + } +} + +static int stbi__pnm_isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +static int stbi__pnm_getinteger(stbi__context *s, char *c) +{ + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value*10 + (*c - '0'); + *c = (char) stbi__get8(s); + if((value > 214748364) || (value == 214748364 && *c > '7')) + return stbi__err("integer parse overflow", "Parsing an integer in the PPM header overflowed a 32-bit int"); + } + + return value; +} + +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) +{ + int maxv, dummy; + char c, p, t; + + if (!x) x = &dummy; + if (!y) y = &dummy; + if (!comp) comp = &dummy; + + stbi__rewind(s); + + // Get identifier + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + + *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char) stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + if(*x == 0) + return stbi__err("invalid width", "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + if (*y == 0) + return stbi__err("invalid width", "PPM image header had zero or overflowing width"); + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + if (maxv > 65535) + return stbi__err("max value > 65535", "PPM image supports only 8-bit and 16-bit images"); + else if (maxv > 255) + return 16; + else + return 8; +} + +static int stbi__pnm_is16(stbi__context *s) +{ + if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) + return 1; + return 0; +} +#endif + +static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) +{ + #ifndef STBI_NO_JPEG + if (stbi__jpeg_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNG + if (stbi__png_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_GIF + if (stbi__gif_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_BMP + if (stbi__bmp_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PIC + if (stbi__pic_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_info(s, x, y, comp)) return 1; + #endif + + // test tga last because it's a crappy test! + #ifndef STBI_NO_TGA + if (stbi__tga_info(s, x, y, comp)) + return 1; + #endif + return stbi__err("unknown image type", "Image not of any known type, or corrupt"); +} + +static int stbi__is_16_main(stbi__context *s) +{ + #ifndef STBI_NO_PNG + if (stbi__png_is16(s)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_is16(s)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_is16(s)) return 1; + #endif + return 0; +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; +} + +STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s,x,y,comp); + fseek(f,pos,SEEK_SET); + return r; +} + +STBIDEF int stbi_is_16_bit(char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_is_16_bit_from_file(f); + fclose(f); + return result; +} + +STBIDEF int stbi_is_16_bit_from_file(FILE *f) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__is_16_main(&s); + fseek(f,pos,SEEK_SET); + return r; +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__is_16_main(&s); +} + +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, void *user) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__is_16_main(&s); +} + +#endif // STB_IMAGE_IMPLEMENTATION + +/* + revision history: + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs + 2.19 (2018-02-11) fix warning + 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug + 1-bit BMP + *_is_16_bit api + avoid warnings + 2.16 (2017-07-23) all functions have 16-bit variants; + STBI_NO_STDIO works again; + compilation fixes; + fix rounding in unpremultiply; + optimize vertical flip; + disable raw_len validation; + documentation fixes + 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; + warning fixes; disable run-time SSE detection on gcc; + uniform handling of optional "return" values; + thread-safe initialization of zlib tables + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs + 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now + 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes + 2.11 (2016-04-02) allocate large structures on the stack + remove white matting for transparent PSD + fix reported channel count for PNG & BMP + re-enable SSE2 in non-gcc 64-bit + support RGB-formatted JPEG + read 16-bit PNGs (only as 8-bit) + 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED + 2.09 (2016-01-16) allow comments in PNM files + 16-bit-per-pixel TGA (not bit-per-component) + info() for TGA could break due to .hdr handling + info() for BMP to shares code instead of sloppy parse + can use STBI_REALLOC_SIZED if allocator doesn't support realloc + code cleanup + 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA + 2.07 (2015-09-13) fix compiler warnings + partial animated GIF support + limited 16-bpc PSD support + #ifdef unused functions + bug with < 92 byte PIC,PNM,HDR,TGA + 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value + 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning + 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit + 2.03 (2015-04-12) extra corruption checking (mmozeiko) + stbi_set_flip_vertically_on_load (nguillemot) + fix NEON support; fix mingw support + 2.02 (2015-01-19) fix incorrect assert, fix warning + 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 + 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG + 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) + progressive JPEG (stb) + PGM/PPM support (Ken Miller) + STBI_MALLOC,STBI_REALLOC,STBI_FREE + GIF bugfix -- seemingly never worked + STBI_NO_*, STBI_ONLY_* + 1.48 (2014-12-14) fix incorrectly-named assert() + 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) + optimize PNG (ryg) + fix bug in interlaced PNG with user-specified channel count (stb) + 1.46 (2014-08-26) + fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG + 1.45 (2014-08-16) + fix MSVC-ARM internal compiler error by wrapping malloc + 1.44 (2014-08-07) + various warning fixes from Ronny Chevalier + 1.43 (2014-07-15) + fix MSVC-only compiler problem in code changed in 1.42 + 1.42 (2014-07-09) + don't define _CRT_SECURE_NO_WARNINGS (affects user code) + fixes to stbi__cleanup_jpeg path + added STBI_ASSERT to avoid requiring assert.h + 1.41 (2014-06-25) + fix search&replace from 1.36 that messed up comments/error messages + 1.40 (2014-06-22) + fix gcc struct-initialization warning + 1.39 (2014-06-15) + fix to TGA optimization when req_comp != number of components in TGA; + fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) + add support for BMP version 5 (more ignored fields) + 1.38 (2014-06-06) + suppress MSVC warnings on integer casts truncating values + fix accidental rename of 'skip' field of I/O + 1.37 (2014-06-04) + remove duplicate typedef + 1.36 (2014-06-03) + convert to header file single-file library + if de-iphone isn't set, load iphone images color-swapped instead of returning NULL + 1.35 (2014-05-27) + various warnings + fix broken STBI_SIMD path + fix bug where stbi_load_from_file no longer left file pointer in correct place + fix broken non-easy path for 32-bit BMP (possibly never used) + TGA optimization by Arseny Kapoulkine + 1.34 (unknown) + use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case + 1.33 (2011-07-14) + make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements + 1.32 (2011-07-13) + support for "info" function for all supported filetypes (SpartanJ) + 1.31 (2011-06-20) + a few more leak fixes, bug in PNG handling (SpartanJ) + 1.30 (2011-06-11) + added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) + removed deprecated format-specific test/load functions + removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway + error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) + fix inefficiency in decoding 32-bit BMP (David Woo) + 1.29 (2010-08-16) + various warning fixes from Aurelien Pocheville + 1.28 (2010-08-01) + fix bug in GIF palette transparency (SpartanJ) + 1.27 (2010-08-01) + cast-to-stbi_uc to fix warnings + 1.26 (2010-07-24) + fix bug in file buffering for PNG reported by SpartanJ + 1.25 (2010-07-17) + refix trans_data warning (Won Chun) + 1.24 (2010-07-12) + perf improvements reading from files on platforms with lock-heavy fgetc() + minor perf improvements for jpeg + deprecated type-specific functions so we'll get feedback if they're needed + attempt to fix trans_data warning (Won Chun) + 1.23 fixed bug in iPhone support + 1.22 (2010-07-10) + removed image *writing* support + stbi_info support from Jetro Lauha + GIF support from Jean-Marc Lienher + iPhone PNG-extensions from James Brown + warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) + 1.21 fix use of 'stbi_uc' in header (reported by jon blow) + 1.20 added support for Softimage PIC, by Tom Seddon + 1.19 bug in interlaced PNG corruption check (found by ryg) + 1.18 (2008-08-02) + fix a threading bug (local mutable static) + 1.17 support interlaced PNG + 1.16 major bugfix - stbi__convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug + header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant + 0.50 (2006-11-19) + first released version +*/ + + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +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. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +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 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. +------------------------------------------------------------------------------ +*/ diff --git a/18-depth-testing/src/utils.cpp b/18-depth-testing/src/utils.cpp new file mode 100644 index 0000000..c978e79 --- /dev/null +++ b/18-depth-testing/src/utils.cpp @@ -0,0 +1,11 @@ +#include +#include "json.hpp" +#include "utils.hpp" + +namespace utils { + components::Scene load_scene_config(const std::string& config_file) { + std::ifstream f{"config.json"}; + auto j = json::parse(f); + return j["scene"].template get(); + } +} diff --git a/18-depth-testing/src/utils.hpp b/18-depth-testing/src/utils.hpp new file mode 100644 index 0000000..6bde00d --- /dev/null +++ b/18-depth-testing/src/utils.hpp @@ -0,0 +1,9 @@ +#pragma once + +#include "components.hpp" + +using json = nlohmann::json; + +namespace utils { + components::Scene load_scene_config(const std::string& config_file); +} diff --git a/18-depth-testing/tests/bad_shader.vs b/18-depth-testing/tests/bad_shader.vs new file mode 100644 index 0000000..6743b8a --- /dev/null +++ b/18-depth-testing/tests/bad_shader.vs @@ -0,0 +1,10 @@ +#version 330 core +layout (location = 0) in vec3 aPos; // the position variable has attribute position 0 + +out vec4 vertexColor; // specify a color output to the fragment shader + +void main() +// syntax error here + gl_Position = vec4(aPos, 1.0); // see how we directly give a vec3 to vec4's constructor + vertexColor = vec4(0.5, 0.0, 0.0, 1.0); // set the output variable to a dark-red color +} diff --git a/18-depth-testing/tests/config.json b/18-depth-testing/tests/config.json new file mode 100644 index 0000000..47d9449 --- /dev/null +++ b/18-depth-testing/tests/config.json @@ -0,0 +1,74 @@ +{ + "material_test": { + "ambient": [0.1, 0.1, 0.1], + "shininess": 32.0, + "diffuseMap": 0, + "specularMap": 0 + }, + "lighting_test": { + "directional": [ + { + "position": [0, 0, 0.0], + "direction":[-0.2, -1.0, -0.3], + "ambient":[0.2, 0.2, 0.2], + "diffuse":[0.8, 0.8, 0.8], + "specular":[1.0, 1.0, 1.0], + "constant": 0.0, + "linear": 0.0, + "quadratic": 0.0, + "cut_off": 0.0, + "outer_cut_off": 0.0 + } + ], + "positioned": [ + { + "position": [1.2, 1.0, 2.0], + "direction":[-0.2, -1.0, -0.3], + "ambient":[0.2, 0.2, 0.2], + "diffuse":[0.8, 0.8, 0.8], + "specular":[1.0, 1.0, 1.0], + "constant": 1.0, + "linear": 0.09, + "quadratic": 0.032, + "cut_off": 12.5, + "outer_cut_off": 17.5 + } + ], + "spot": [ + + ], + "camera": { + "position":[2.2, 1.0, 2.0], + "direction":[0.0, 0.0, -1.0], + "ambient":[0.2, 0.2, 0.2], + "diffuse":[0.8, 0.8, 0.8], + "specular":[1.0, 1.0, 1.0], + "constant": 1.0, + "linear": 0.09, + "quadratic": 0.032, + "cut_off": 12.5, + "outer_cut_off": 17.5 + } + }, + + "camera_test": { + "position": [0.0, 0.0, 3.0], + "front": [0.0, 0.0, -1.0], + "up": [0.0, 1.0, 0.0], + "direction": [0.0, 0.0, 0.0], + "movement_speed": 20.0 + }, + "model_test": { + "directory": "assets", + "model_path": "create.obj" + }, + "thing_test": { + "model": "crate", + "position": [0.0, 0.0, 0.0], + "material": "crate" + }, + "shader_test": { + "vertex_path": "shaders/16-vert.glsl", + "frag_path": "shaders/16-frag.glsl" + } +} diff --git a/18-depth-testing/tests/config_tests.cpp b/18-depth-testing/tests/config_tests.cpp new file mode 100644 index 0000000..dbb22da --- /dev/null +++ b/18-depth-testing/tests/config_tests.cpp @@ -0,0 +1,46 @@ +#include +#include "components.hpp" +#include +#include "json.hpp" + +#include +using json = nlohmann::json; + +using namespace fuc2; + +/* + * This also tests Mesh by using Model to load them. + */ +namespace config_tests { + void test_json_components() { + std::ifstream f{"tests/config.json"}; + auto j = json::parse(f); + auto mat = j["material_test"].get(); + + CHECK(mat.ambient.x == 0.1f, "wrong value"); + + auto light = j["lighting_test"].get(); + + auto camera = j["camera_test"].get(); + + auto model = j["model_test"].get(); + + auto thing = j["thing_test"].get(); + } + + + void test_load_json_config() { + std::ifstream f{"config.json"}; + auto j = json::parse(f); + auto scene = j["scene"].get(); + } + + fuc2::Set TESTS{ + .name="config", + .options={ .fail_fast=false }, + .tests={ + TEST(test_json_components), + TEST(test_load_json_config), + } + }; +} diff --git a/18-depth-testing/tests/main.cpp b/18-depth-testing/tests/main.cpp new file mode 100644 index 0000000..d7f31cb --- /dev/null +++ b/18-depth-testing/tests/main.cpp @@ -0,0 +1,42 @@ +#include +#include +#include +#include "dbc.hpp" + +TEST_SET(shader_tests); +TEST_SET(model_tests); +TEST_SET(config_tests); + +using namespace fuc2; + +int main(int argc, char* argv[]) { + glfwInit(); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + + GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); + if (window == NULL) + { + dbc::log("Failed to create GLFW window"); + glfwTerminate(); + return -1; + } + glfwMakeContextCurrent(window); + + // glad: load all OpenGL function pointers + // --------------------------------------- + if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) + { + dbc::log("Failed to initialize GLAD"); + return -1; + } + + std::vector tests{ + shader_tests::TESTS, + model_tests::TESTS, + config_tests::TESTS, + }; + + return run_tests(tests, argc, argv); +} diff --git a/18-depth-testing/tests/meson.build b/18-depth-testing/tests/meson.build new file mode 100644 index 0000000..f327eb3 --- /dev/null +++ b/18-depth-testing/tests/meson.build @@ -0,0 +1,6 @@ +fuc2_tests = files( + 'main.cpp', + 'shader_tests.cpp', + 'model_tests.cpp', + 'config_tests.cpp', +) diff --git a/18-depth-testing/tests/model_tests.cpp b/18-depth-testing/tests/model_tests.cpp new file mode 100644 index 0000000..54b159d --- /dev/null +++ b/18-depth-testing/tests/model_tests.cpp @@ -0,0 +1,42 @@ +#include +#include +#include +#include "model.hpp" +#include "shader.hpp" + +using namespace fuc2; + +/* + * This also tests Mesh by using Model to load them. + */ +namespace model_tests { + void test_load_textures() { + Shader shader{"shaders/14-vert.glsl", "shaders/14-frag.glsl"}; + + Model popcorn{"assets", "popcorn_model_a.glb"}; + popcorn.draw(shader); + + Model crate_glb{"assets", "crate.glb"}; + crate_glb.draw(shader); + + Model crate_obj{"assets", "crate.obj"}; + crate_obj.draw(shader); + } + + void test_failures() { + auto runner = [&]() { + Model bad_obj{"assets", "does_not_exist.obj"}; + }; + + BLOWS_UP(runner, "should fail on missing file."); + } + + fuc2::Set TESTS{ + .name="models", + .options={ .fail_fast=false }, + .tests={ + TEST(test_load_textures), + TEST(test_failures), + } + }; +} diff --git a/18-depth-testing/tests/shader_tests.cpp b/18-depth-testing/tests/shader_tests.cpp new file mode 100644 index 0000000..270b921 --- /dev/null +++ b/18-depth-testing/tests/shader_tests.cpp @@ -0,0 +1,33 @@ +#include +#include +#include +#include "shader.hpp" + +using namespace fuc2; + +namespace shader_tests { + void test_load_shaders() { + Shader shader("shaders/3.3.shader.vs", "shaders/3.3.shader.fs"); + + shader.use(); + + CHECK(shader.ID != UINT_MAX, "Shader not initialized"); + } + + void test_compile_fail() { + auto runner = [&]() { + Shader shader("tests/bad_shader.vs", "shaders/3.3.shader.fs"); + }; + + BLOWS_UP(runner, "compile fail should blow up"); + } + + fuc2::Set TESTS{ + .name="shaders", + .options={ .fail_fast=false }, + .tests={ + TEST(test_load_shaders), + TEST(test_compile_fail), + } + }; +} diff --git a/18-depth-testing/wraps/assimp.wrap b/18-depth-testing/wraps/assimp.wrap new file mode 100644 index 0000000..4bb6029 --- /dev/null +++ b/18-depth-testing/wraps/assimp.wrap @@ -0,0 +1,9 @@ +[wrap-git] +directory=assimp-5.4.3 +url=https://github.com/assimp/assimp.git +revision=v5.4.3 +depth=1 +method=cmake + +[provide] +assimp = assimp_dep diff --git a/18-depth-testing/wraps/box2d.wrap b/18-depth-testing/wraps/box2d.wrap new file mode 100644 index 0000000..d4b2d96 --- /dev/null +++ b/18-depth-testing/wraps/box2d.wrap @@ -0,0 +1,13 @@ +[wrap-file] +directory = box2d-2.4.1 +source_url = https://github.com/erincatto/box2d/archive/v2.4.1/box2d-2.4.1.tar.gz +source_filename = box2d-2.4.1.tar.gz +source_hash = d6b4650ff897ee1ead27cf77a5933ea197cbeef6705638dd181adc2e816b23c2 +patch_filename = box2d_2.4.1-4_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/box2d_2.4.1-4/get_patch +patch_hash = f5235178029fa0a8deaf8dddbccfd70739b289cffbeec5c98fc91209683c4802 +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/box2d_2.4.1-4/box2d-2.4.1.tar.gz +wrapdb_version = 2.4.1-4 + +[provide] +box2d = box2d_dep diff --git a/18-depth-testing/wraps/fmt.wrap b/18-depth-testing/wraps/fmt.wrap new file mode 100644 index 0000000..fd50847 --- /dev/null +++ b/18-depth-testing/wraps/fmt.wrap @@ -0,0 +1,13 @@ +[wrap-file] +directory = fmt-11.0.2 +source_url = https://github.com/fmtlib/fmt/archive/11.0.2.tar.gz +source_filename = fmt-11.0.2.tar.gz +source_hash = 6cb1e6d37bdcb756dbbe59be438790db409cdb4868c66e888d5df9f13f7c027f +patch_filename = fmt_11.0.2-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/fmt_11.0.2-1/get_patch +patch_hash = 90c9e3b8e8f29713d40ca949f6f93ad115d78d7fb921064112bc6179e6427c5e +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/fmt_11.0.2-1/fmt-11.0.2.tar.gz +wrapdb_version = 11.0.2-1 + +[provide] +fmt = fmt_dep diff --git a/18-depth-testing/wraps/fuc2.wrap b/18-depth-testing/wraps/fuc2.wrap new file mode 100644 index 0000000..dc4fa27 --- /dev/null +++ b/18-depth-testing/wraps/fuc2.wrap @@ -0,0 +1,9 @@ +[wrap-git] +directory=fuc2-0.2.0 +url=https://lcthw.dev/cpp/fuc2.git +revision=HEAD +depth=1 +method=meson + +[provide] +fuc2 = fuc2_dep diff --git a/18-depth-testing/wraps/glfw.wrap b/18-depth-testing/wraps/glfw.wrap new file mode 100644 index 0000000..a408912 --- /dev/null +++ b/18-depth-testing/wraps/glfw.wrap @@ -0,0 +1,13 @@ +[wrap-file] +directory = glfw-3.4 +source_url = https://github.com/glfw/glfw/archive/refs/tags/3.4.tar.gz +source_filename = glfw-3.4.tar.gz +source_hash = c038d34200234d071fae9345bc455e4a8f2f544ab60150765d7704e08f3dac01 +patch_filename = glfw_3.4-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/glfw_3.4-1/get_patch +patch_hash = 58a6a6cdb28195d7f7e6f5de85dff7044d378e49b46bf1d4a9b04c97ed93e6b0 +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/glfw_3.4-1/glfw-3.4.tar.gz +wrapdb_version = 3.4-1 + +[provide] +glfw3 = glfw_dep diff --git a/18-depth-testing/wraps/glm.wrap b/18-depth-testing/wraps/glm.wrap new file mode 100644 index 0000000..d75571e --- /dev/null +++ b/18-depth-testing/wraps/glm.wrap @@ -0,0 +1,13 @@ +[wrap-file] +directory = glm-1.0.1 +source_url = https://github.com/g-truc/glm/archive/refs/tags/1.0.1.tar.gz +source_filename = glm-1.0.1.tar.gz +source_hash = 9f3174561fd26904b23f0db5e560971cbf9b3cbda0b280f04d5c379d03bf234c +patch_filename = glm_1.0.1-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/glm_1.0.1-1/get_patch +patch_hash = 25679275e26bc4c36bb617d1b4a52197039402af828d2a4bf67b3c0260a5df6a +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/glm_1.0.1-1/glm-1.0.1.tar.gz +wrapdb_version = 1.0.1-1 + +[provide] +glm = glm_dep diff --git a/18-depth-testing/wraps/nlohmann_json.wrap b/18-depth-testing/wraps/nlohmann_json.wrap new file mode 100644 index 0000000..8c46676 --- /dev/null +++ b/18-depth-testing/wraps/nlohmann_json.wrap @@ -0,0 +1,11 @@ +[wrap-file] +directory = nlohmann_json-3.11.3 +lead_directory_missing = true +source_url = https://github.com/nlohmann/json/releases/download/v3.11.3/include.zip +source_filename = nlohmann_json-3.11.3.zip +source_hash = a22461d13119ac5c78f205d3df1db13403e58ce1bb1794edc9313677313f4a9d +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/nlohmann_json_3.11.3-1/nlohmann_json-3.11.3.zip +wrapdb_version = 3.11.3-1 + +[provide] +nlohmann_json = nlohmann_json_dep