This commit is contained in:
2026-06-14 19:09:18 +01:00
parent 14bd1a9271
commit 13fa90a0e9
3958 changed files with 999286 additions and 4 deletions
+61
View File
@@ -0,0 +1,61 @@
/**
The code below is based on the Doxygen Awesome project, see
https://github.com/jothepro/doxygen-awesome-css
MIT License
Copyright (c) 2021 - 2022 jothepro
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.
*/
let clipboard_title = "Copy to clipboard"
let clipboard_icon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="#888" d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>`
let clipboard_successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z"/></svg>`
let clipboard_successDuration = 1000
$(function() {
if(navigator.clipboard) {
const fragments = document.getElementsByClassName("fragment")
for(const fragment of fragments) {
const clipboard_div = document.createElement("div")
clipboard_div.classList.add("clipboard")
clipboard_div.innerHTML = clipboard_icon
clipboard_div.title = clipboard_title
$(clipboard_div).click(function() {
const content = this.parentNode.cloneNode(true)
// filter out line number and folded fragments from file listings
content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() })
let text = content.textContent
// remove trailing newlines and trailing spaces from empty lines
text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'')
navigator.clipboard.writeText(text);
this.classList.add("success")
this.innerHTML = clipboard_successIcon
window.setTimeout(() => { // switch back to normal icon after timeout
this.classList.remove("success")
this.innerHTML = clipboard_icon
}, clipboard_successDuration);
})
fragment.insertBefore(clipboard_div, fragment.firstChild)
}
}
})
+58
View File
@@ -0,0 +1,58 @@
/*!
Cookie helper functions
Copyright (c) 2023 Dimitri van Heesch
Released under MIT license.
*/
let Cookie = {
cookie_namespace: 'doxygen_',
readSetting(cookie,defVal) {
if (window.chrome) {
const val = localStorage.getItem(this.cookie_namespace+cookie) ||
sessionStorage.getItem(this.cookie_namespace+cookie);
if (val) return val;
} else {
let myCookie = this.cookie_namespace+cookie+"=";
if (document.cookie) {
const index = document.cookie.indexOf(myCookie);
if (index != -1) {
const valStart = index + myCookie.length;
let valEnd = document.cookie.indexOf(";", valStart);
if (valEnd == -1) {
valEnd = document.cookie.length;
}
return document.cookie.substring(valStart, valEnd);
}
}
}
return defVal;
},
writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete
if (window.chrome) {
if (days==0) {
sessionStorage.setItem(this.cookie_namespace+cookie,val);
} else {
localStorage.setItem(this.cookie_namespace+cookie,val);
}
} else {
let date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
const expiration = days!=0 ? "expires="+date.toGMTString()+";" : "";
document.cookie = this.cookie_namespace + cookie + "=" +
val + "; SameSite=Lax;" + expiration + "path=/";
}
},
eraseSetting(cookie) {
if (window.chrome) {
if (localStorage.getItem(this.cookie_namespace+cookie)) {
localStorage.removeItem(this.cookie_namespace+cookie);
} else if (sessionStorage.getItem(this.cookie_namespace+cookie)) {
sessionStorage.removeItem(this.cookie_namespace+cookie);
}
} else {
this.writeSetting(cookie,'',-1);
}
},
}
@@ -0,0 +1,123 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktxinfo Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_09422af9f6e39cd219a538ae2d9ff0a8.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">ktxinfo Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Directory dependency graph for ktxinfo:</div>
<div class="dyncontent">
<div class="center"><img src="dir_09422af9f6e39cd219a538ae2d9ff0a8_dep.png" border="0" usemap="#adir__09422af9f6e39cd219a538ae2d9ff0a8__dep" loading="lazy" alt="ktxinfo"/></div>
<map name="adir__09422af9f6e39cd219a538ae2d9ff0a8__dep" id="adir__09422af9f6e39cd219a538ae2d9ff0a8__dep">
<area shape="rect" href="dir_09422af9f6e39cd219a538ae2d9ff0a8.html" title="ktxinfo" alt="" coords="27,53,88,80"/>
<area shape="rect" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,99,91"/>
</map>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>tools</b></li><li class="navelem"><b>ktxinfo</b></li>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
<map id="ktxinfo" name="ktxinfo">
<area shape="rect" id="node1" href="dir_09422af9f6e39cd219a538ae2d9ff0a8.html" title="ktxinfo" alt="" coords="27,53,88,80"/>
<area shape="rect" id="clust1" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,99,91"/>
</map>
@@ -0,0 +1 @@
ce8c352f96bd3948a7d651256deaf600
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1,123 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx2check Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_21a04a93d00272cf501aa9cc1b9ece4b.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">ktx2check Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Directory dependency graph for ktx2check:</div>
<div class="dyncontent">
<div class="center"><img src="dir_21a04a93d00272cf501aa9cc1b9ece4b_dep.png" border="0" usemap="#adir__21a04a93d00272cf501aa9cc1b9ece4b__dep" loading="lazy" alt="ktx2check"/></div>
<map name="adir__21a04a93d00272cf501aa9cc1b9ece4b__dep" id="adir__21a04a93d00272cf501aa9cc1b9ece4b__dep">
<area shape="rect" href="dir_21a04a93d00272cf501aa9cc1b9ece4b.html" title="ktx2check" alt="" coords="27,53,109,80"/>
<area shape="rect" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,120,91"/>
</map>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>tools</b></li><li class="navelem"><b>ktx2check</b></li>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
<map id="ktx2check" name="ktx2check">
<area shape="rect" id="node1" href="dir_21a04a93d00272cf501aa9cc1b9ece4b.html" title="ktx2check" alt="" coords="27,53,109,80"/>
<area shape="rect" id="clust1" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,120,91"/>
</map>
@@ -0,0 +1 @@
b3efd5d47f27138e50cb5364def773c1
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

@@ -0,0 +1,123 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: toktx Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_49c59200b1838f4c537a92200e5de011.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">toktx Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Directory dependency graph for toktx:</div>
<div class="dyncontent">
<div class="center"><img src="dir_49c59200b1838f4c537a92200e5de011_dep.png" border="0" usemap="#adir__49c59200b1838f4c537a92200e5de011__dep" loading="lazy" alt="toktx"/></div>
<map name="adir__49c59200b1838f4c537a92200e5de011__dep" id="adir__49c59200b1838f4c537a92200e5de011__dep">
<area shape="rect" href="dir_49c59200b1838f4c537a92200e5de011.html" title="toktx" alt="" coords="27,53,77,80"/>
<area shape="rect" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,88,91"/>
</map>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>tools</b></li><li class="navelem"><b>toktx</b></li>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
<map id="toktx" name="toktx">
<area shape="rect" id="node1" href="dir_49c59200b1838f4c537a92200e5de011.html" title="toktx" alt="" coords="27,53,77,80"/>
<area shape="rect" id="clust1" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,88,91"/>
</map>
@@ -0,0 +1 @@
1605f7f267f1bb56ea167e3d0796d799
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -0,0 +1,124 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: tools Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">tools Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-subdirs" class="groupheader"><a id="subdirs" name="subdirs"></a>
Directories</h2></td></tr>
<tr class="memitem:ktx" id="r_ktx"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_f7a03f9c08c5442ecdb55dc480809771.html">ktx</a></td></tr>
<tr class="memitem:ktx2check" id="r_ktx2check"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_21a04a93d00272cf501aa9cc1b9ece4b.html">ktx2check</a></td></tr>
<tr class="memitem:ktx2ktx2" id="r_ktx2ktx2"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_e326a70ec4ca1fd26ce6fd35942b1c22.html">ktx2ktx2</a></td></tr>
<tr class="memitem:ktxinfo" id="r_ktxinfo"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_09422af9f6e39cd219a538ae2d9ff0a8.html">ktxinfo</a></td></tr>
<tr class="memitem:ktxsc" id="r_ktxsc"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_a33ac96fab323650bfd87b7a47549660.html">ktxsc</a></td></tr>
<tr class="memitem:toktx" id="r_toktx"><td class="memItemLeft"><span class="iconfolder"><div class="folder-icon"></div></span>&#160;</td><td class="memItemRight"><a class="el" href="dir_49c59200b1838f4c537a92200e5de011.html">toktx</a></td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>tools</b></li>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,123 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktxsc Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_a33ac96fab323650bfd87b7a47549660.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">ktxsc Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Directory dependency graph for ktxsc:</div>
<div class="dyncontent">
<div class="center"><img src="dir_a33ac96fab323650bfd87b7a47549660_dep.png" border="0" usemap="#adir__a33ac96fab323650bfd87b7a47549660__dep" loading="lazy" alt="ktxsc"/></div>
<map name="adir__a33ac96fab323650bfd87b7a47549660__dep" id="adir__a33ac96fab323650bfd87b7a47549660__dep">
<area shape="rect" href="dir_a33ac96fab323650bfd87b7a47549660.html" title="ktxsc" alt="" coords="27,53,80,80"/>
<area shape="rect" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,91,91"/>
</map>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>tools</b></li><li class="navelem"><b>ktxsc</b></li>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
<map id="ktxsc" name="ktxsc">
<area shape="rect" id="node1" href="dir_a33ac96fab323650bfd87b7a47549660.html" title="ktxsc" alt="" coords="27,53,80,80"/>
<area shape="rect" id="clust1" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,91,91"/>
</map>
@@ -0,0 +1 @@
a69d024dd6efc87531a251f5fc869f01
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

@@ -0,0 +1,123 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx2ktx2 Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_e326a70ec4ca1fd26ce6fd35942b1c22.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">ktx2ktx2 Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Directory dependency graph for ktx2ktx2:</div>
<div class="dyncontent">
<div class="center"><img src="dir_e326a70ec4ca1fd26ce6fd35942b1c22_dep.png" border="0" usemap="#adir__e326a70ec4ca1fd26ce6fd35942b1c22__dep" loading="lazy" alt="ktx2ktx2"/></div>
<map name="adir__e326a70ec4ca1fd26ce6fd35942b1c22__dep" id="adir__e326a70ec4ca1fd26ce6fd35942b1c22__dep">
<area shape="rect" href="dir_e326a70ec4ca1fd26ce6fd35942b1c22.html" title="ktx2ktx2" alt="" coords="27,53,98,80"/>
<area shape="rect" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,109,91"/>
</map>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>tools</b></li><li class="navelem"><b>ktx2ktx2</b></li>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
<map id="ktx2ktx2" name="ktx2ktx2">
<area shape="rect" id="node1" href="dir_e326a70ec4ca1fd26ce6fd35942b1c22.html" title="ktx2ktx2" alt="" coords="27,53,98,80"/>
<area shape="rect" id="clust1" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,109,91"/>
</map>
@@ -0,0 +1 @@
55974e449aae0000f1a16547bcf601b9
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

@@ -0,0 +1,123 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('dir_f7a03f9c08c5442ecdb55dc480809771.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">ktx Directory Reference</div></div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Directory dependency graph for ktx:</div>
<div class="dyncontent">
<div class="center"><img src="dir_f7a03f9c08c5442ecdb55dc480809771_dep.png" border="0" usemap="#adir__f7a03f9c08c5442ecdb55dc480809771__dep" loading="lazy" alt="ktx"/></div>
<map name="adir__f7a03f9c08c5442ecdb55dc480809771__dep" id="adir__f7a03f9c08c5442ecdb55dc480809771__dep">
<area shape="rect" href="dir_f7a03f9c08c5442ecdb55dc480809771.html" title="ktx" alt="" coords="27,53,66,80"/>
<area shape="rect" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,77,91"/>
</map>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>tools</b></li><li class="navelem"><b>ktx</b></li>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
<map id="ktx" name="ktx">
<area shape="rect" id="node1" href="dir_f7a03f9c08c5442ecdb55dc480809771.html" title="ktx" alt="" coords="27,53,66,80"/>
<area shape="rect" id="clust1" href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html" title="tools" alt="" coords="16,16,77,91"/>
</map>
@@ -0,0 +1 @@
aa354c48e6ce4863fea989ac7c1ebd78
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,136 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<title>Validator / crawler helper</title>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
</head>
<body>
<a href="../index.html"/>
<a href="../ktxjswrappers/index.html"/>
<a href="../libktx/index.html"/>
<a href="../license.html"/>
<a href="../pyktx/index.html"/>
<a href="dir_09422af9f6e39cd219a538ae2d9ff0a8.html"/>
<a href="dir_21a04a93d00272cf501aa9cc1b9ece4b.html"/>
<a href="dir_49c59200b1838f4c537a92200e5de011.html"/>
<a href="dir_4eeb864c4eec08c7d6b9d3b0352cfdde.html"/>
<a href="dir_a33ac96fab323650bfd87b7a47549660.html"/>
<a href="dir_e326a70ec4ca1fd26ce6fd35942b1c22.html"/>
<a href="dir_f7a03f9c08c5442ecdb55dc480809771.html"/>
<a href="doxygen_crawl.html"/>
<a href="graph_legend.html"/>
<a href="index.html"/>
<a href="index.html#autotoc_md0"/>
<a href="ktx.html"/>
<a href="ktx.html#ktx_author"/>
<a href="ktx.html#ktx_description"/>
<a href="ktx.html#ktx_exitstatus"/>
<a href="ktx.html#ktx_history"/>
<a href="ktx.html#ktx_main_options"/>
<a href="ktx.html#ktx_synopsis"/>
<a href="ktx2check.html"/>
<a href="ktx2check.html#ktx2check_author"/>
<a href="ktx2check.html#ktx2check_description"/>
<a href="ktx2check.html#ktx2check_exitstatus"/>
<a href="ktx2check.html#ktx2check_history"/>
<a href="ktx2check.html#ktx2check_synopsis"/>
<a href="ktx2ktx2.html"/>
<a href="ktx2ktx2.html#ktx2ktx2_author"/>
<a href="ktx2ktx2.html#ktx2ktx2_description"/>
<a href="ktx2ktx2.html#ktx2ktx2_exitstatus"/>
<a href="ktx2ktx2.html#ktx2ktx2_history"/>
<a href="ktx2ktx2.html#ktx2ktx2_synopsis"/>
<a href="ktx_compare.html"/>
<a href="ktx_compare.html#ktx_compare_author"/>
<a href="ktx_compare.html#ktx_compare_description"/>
<a href="ktx_compare.html#ktx_compare_exitstatus"/>
<a href="ktx_compare.html#ktx_compare_history"/>
<a href="ktx_compare.html#ktx_compare_options"/>
<a href="ktx_compare.html#ktx_compare_synopsis"/>
<a href="ktx_create.html"/>
<a href="ktx_create.html#ktx_create_author"/>
<a href="ktx_create.html#ktx_create_description"/>
<a href="ktx_create.html#ktx_create_exitstatus"/>
<a href="ktx_create.html#ktx_create_history"/>
<a href="ktx_create.html#ktx_create_options"/>
<a href="ktx_create.html#ktx_create_options_encoding"/>
<a href="ktx_create.html#ktx_create_options_general"/>
<a href="ktx_create.html#ktx_create_synopsis"/>
<a href="ktx_create.html#ktx_create_tf_handling"/>
<a href="ktx_create.html#ktx_create_tf_handling_changes"/>
<a href="ktx_create.html#ktx_create_tf_handling_details"/>
<a href="ktx_deflate.html"/>
<a href="ktx_deflate.html#ktx_deflate_author"/>
<a href="ktx_deflate.html#ktx_deflate_description"/>
<a href="ktx_deflate.html#ktx_deflate_exitstatus"/>
<a href="ktx_deflate.html#ktx_deflate_history"/>
<a href="ktx_deflate.html#ktx_deflate_options"/>
<a href="ktx_deflate.html#ktx_deflate_synopsis"/>
<a href="ktx_encode.html"/>
<a href="ktx_encode.html#ktx_encode_author"/>
<a href="ktx_encode.html#ktx_encode_description"/>
<a href="ktx_encode.html#ktx_encode_exitstatus"/>
<a href="ktx_encode.html#ktx_encode_history"/>
<a href="ktx_encode.html#ktx_encode_options"/>
<a href="ktx_encode.html#ktx_encode_options_encoding"/>
<a href="ktx_encode.html#ktx_encode_options_general"/>
<a href="ktx_encode.html#ktx_encode_synopsis"/>
<a href="ktx_extract.html"/>
<a href="ktx_extract.html#ktx_extract_author"/>
<a href="ktx_extract.html#ktx_extract_description"/>
<a href="ktx_extract.html#ktx_extract_exitstatus"/>
<a href="ktx_extract.html#ktx_extract_history"/>
<a href="ktx_extract.html#ktx_extract_options"/>
<a href="ktx_extract.html#ktx_extract_synopsis"/>
<a href="ktx_help.html"/>
<a href="ktx_help.html#ktx_help_author"/>
<a href="ktx_help.html#ktx_help_description"/>
<a href="ktx_help.html#ktx_help_exitstatus"/>
<a href="ktx_help.html#ktx_help_history"/>
<a href="ktx_help.html#ktx_help_options"/>
<a href="ktx_help.html#ktx_help_synopsis"/>
<a href="ktx_info.html"/>
<a href="ktx_info.html#ktx_info_author"/>
<a href="ktx_info.html#ktx_info_description"/>
<a href="ktx_info.html#ktx_info_exitstatus"/>
<a href="ktx_info.html#ktx_info_history"/>
<a href="ktx_info.html#ktx_info_options"/>
<a href="ktx_info.html#ktx_info_synopsis"/>
<a href="ktx_transcode.html"/>
<a href="ktx_transcode.html#ktx_transcode_author"/>
<a href="ktx_transcode.html#ktx_transcode_description"/>
<a href="ktx_transcode.html#ktx_transcode_exitstatus"/>
<a href="ktx_transcode.html#ktx_transcode_history"/>
<a href="ktx_transcode.html#ktx_transcode_options"/>
<a href="ktx_transcode.html#ktx_transcode_synopsis"/>
<a href="ktx_validate.html"/>
<a href="ktx_validate.html#ktx_validate_author"/>
<a href="ktx_validate.html#ktx_validate_description"/>
<a href="ktx_validate.html#ktx_validate_exitstatus"/>
<a href="ktx_validate.html#ktx_validate_history"/>
<a href="ktx_validate.html#ktx_validate_options"/>
<a href="ktx_validate.html#ktx_validate_synopsis"/>
<a href="ktxinfo.html"/>
<a href="ktxinfo.html#ktxinfo_author"/>
<a href="ktxinfo.html#ktxinfo_description"/>
<a href="ktxinfo.html#ktxinfo_exitstatus"/>
<a href="ktxinfo.html#ktxinfo_history"/>
<a href="ktxinfo.html#ktxinfo_synopsis"/>
<a href="ktxsc.html"/>
<a href="ktxsc.html#ktxsc_author"/>
<a href="ktxsc.html#ktxsc_description"/>
<a href="ktxsc.html#ktxsc_exitstatus"/>
<a href="ktxsc.html#ktxsc_history"/>
<a href="ktxsc.html#ktxsc_synopsis"/>
<a href="pages.html"/>
<a href="toktx.html"/>
<a href="toktx.html#toktx_author"/>
<a href="toktx.html#toktx_description"/>
<a href="toktx.html#toktx_exitstatus"/>
<a href="toktx.html#toktx_history"/>
<a href="toktx.html#toktx_synopsis"/>
</body>
</html>
+191
View File
@@ -0,0 +1,191 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
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.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function toggleVisibility(linkObj) {
return dynsection.toggleVisibility(linkObj);
}
let dynsection = {
// helper function
updateStripes : function() {
$('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even');
$('table.directory tr').
removeClass('odd').filter(':visible:odd').addClass('odd');
},
toggleVisibility : function(linkObj) {
const base = $(linkObj).attr('id');
const summary = $('#'+base+'-summary');
const content = $('#'+base+'-content');
const trigger = $('#'+base+'-trigger');
const src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.slideUp('fast');
summary.show();
$(linkObj).find('.arrowhead').addClass('closed').removeClass('opened');
} else {
content.slideDown('fast');
summary.hide();
$(linkObj).find('.arrowhead').removeClass('closed').addClass('opened');
}
return false;
},
toggleLevel : function(level) {
$('table.directory tr').each(function() {
const l = this.id.split('_').length-1;
const i = $('#img'+this.id.substring(3));
const a = $('#arr'+this.id.substring(3));
if (l<level+1) {
i.find('.folder-icon').addClass('open');
a.find('.arrowhead').removeClass('closed').addClass('opened');
$(this).show();
} else if (l==level+1) {
a.find('.arrowhead').removeClass('opened').addClass('closed');
i.find('.folder-icon').removeClass('open');
$(this).show();
} else {
$(this).hide();
}
});
this.updateStripes();
},
toggleFolder : function(id) {
// the clicked row
const currentRow = $('#row_'+id);
// all rows after the clicked row
const rows = currentRow.nextAll("tr");
const re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
// only match elements AFTER this one (can't hide elements before)
const childRows = rows.filter(function() { return this.id.match(re); });
// first row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
// replace down arrow by right arrow for current row
const currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfolder").find('.folder-icon').removeClass("open");
currentRowSpans.filter(".opened").removeClass("opened").addClass("closed");
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
} else { // we are SHOWING
// replace right arrow by down arrow for current row
const currentRowSpans = currentRow.find("span");
currentRowSpans.filter(".iconfolder").find('.folder-icon').addClass("open");
currentRowSpans.filter(".closed").removeClass("closed").addClass("opened");
// replace down arrows by right arrows for child rows
const childRowsSpans = childRows.find("span");
childRowsSpans.filter(".iconfolder").find('.folder-icon').removeClass("open");
childRowsSpans.filter(".opened").removeClass("opened").addClass("closed");
childRows.show(); //show all children
}
this.updateStripes();
},
toggleInherit : function(id) {
let rows = $('tr.inherit.'+id);
let header = $('tr.inherit_header.'+id);
if (rows.filter(':first').is(':visible')===true) {
rows.hide();
$(header).find('.arrowhead').addClass('closed').removeClass('opened');
} else {
rows.show();
$(header).find('.arrowhead').removeClass('closed').addClass('opened');
}
},
};
let codefold = {
opened : true,
// toggle all folding blocks
toggle_all : function() {
if (this.opened) {
$('#fold_all').addClass('plus').removeClass('minus');
$('div[id^=foldopen]').hide();
$('div[id^=foldclosed]').show();
$('div[id^=foldclosed] span.fold').removeClass('minus').addClass('plus');
} else {
$('#fold_all').addClass('minus').removeClass('plus');
$('div[id^=foldopen]').show();
$('div[id^=foldclosed]').hide();
}
this.opened=!this.opened;
},
// toggle single folding block
toggle : function(id) {
$('#foldopen'+id).toggle();
$('#foldclosed'+id).toggle();
$('#foldopen'+id).next().find('span.fold').addClass('plus').removeClass('minus');
},
init : function() {
$('span[class=lineno]').css({
'padding-right':'4px',
'margin-right':'2px',
'display':'inline-block',
'width':'54px',
'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%'
});
// add global toggle to first line
$('span[class=lineno]:first').append('<span class="fold minus" id="fold_all" '+
'onclick="javascript:codefold.toggle_all();"></span>');
// add vertical lines to other rows
$('span[class=lineno]').not(':eq(0)').append('<span class="fold"></span>');
// add toggle controls to lines with fold divs
$('div[class=foldopen]').each(function() {
// extract specific id to use
const id = $(this).attr('id').replace('foldopen','');
// extract start and end foldable fragment attributes
const start = $(this).attr('data-start');
const end = $(this).attr('data-end');
// replace normal fold span with controls for the first line of a foldable fragment
$(this).find('span[class=fold]:first').replaceWith('<span class="fold minus" '+
'onclick="javascript:codefold.toggle(\''+id+'\');"></span>');
// append div for folded (closed) representation
$(this).after('<div id="foldclosed'+id+'" class="foldclosed" style="display:none;"></div>');
// extract the first line from the "open" section to represent closed content
const line = $(this).children().first().clone();
// remove any glow that might still be active on the original line
$(line).removeClass('glow');
if (start) {
// if line already ends with a start marker (e.g. trailing {), remove it
$(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),''));
}
// replace minus with plus symbol
$(line).find('span[class=fold]').addClass('plus').removeClass('minus');
// append ellipsis
$(line).append(' '+start+'<a href="javascript:codefold.toggle(\''+id+'\')">&#8230;</a>'+end);
// insert constructed line into closed div
$('#foldclosed'+id).html(line);
});
},
};
/* @license-end */
@@ -0,0 +1,166 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: Graph Legend</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('graph_legend.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">Graph Legend</div></div>
</div><!--header-->
<div class="contents">
<p>This page explains how to interpret the graphs that are generated by doxygen.</p>
<p>Consider the following example: </p><div class="fragment"><div class="line"><span class="comment">/*! Invisible class because of truncation */</span></div>
<div class="line"><span class="keyword">class </span>Invisible { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Truncated class, inheritance relation is hidden */</span></div>
<div class="line"><span class="keyword">class </span>Truncated : <span class="keyword">public</span> Invisible { };</div>
<div class="line"> </div>
<div class="line"><span class="comment">/* Class not documented with doxygen comments */</span></div>
<div class="line"><span class="keyword">class </span>Undocumented { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is inherited using public inheritance */</span></div>
<div class="line"><span class="keyword">class </span>PublicBase : <span class="keyword">public</span> Truncated { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! A template class */</span></div>
<div class="line"><span class="keyword">template</span>&lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span>Templ { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is inherited using protected inheritance */</span></div>
<div class="line"><span class="keyword">class </span>ProtectedBase { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is inherited using private inheritance */</span></div>
<div class="line"><span class="keyword">class </span>PrivateBase { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Class that is used by the Inherited class */</span></div>
<div class="line"><span class="keyword">class </span>Used { };</div>
<div class="line"><span class="comment"></span> </div>
<div class="line"><span class="comment">/*! Super class that inherits a number of other classes */</span></div>
<div class="line"><span class="keyword">class </span>Inherited : <span class="keyword">public</span> PublicBase,</div>
<div class="line"> <span class="keyword">protected</span> ProtectedBase,</div>
<div class="line"> <span class="keyword">private</span> PrivateBase,</div>
<div class="line"> <span class="keyword">public</span> Undocumented,</div>
<div class="line"> <span class="keyword">public</span> Templ&lt;int&gt;</div>
<div class="line">{</div>
<div class="line"> <span class="keyword">private</span>:</div>
<div class="line"> Used *m_usedClass;</div>
<div class="line">};</div>
</div><!-- fragment --><p> This will result in the following graph:</p>
<center><img src="graph_legend.png" alt="" class="inline"/></center><p>The boxes in the above graph have the following meaning: </p>
<ul>
<li>
A filled gray box represents the struct or class for which the graph is generated. </li>
<li>
A box with a black border denotes a documented struct or class. </li>
<li>
A box with a gray border denotes an undocumented struct or class. </li>
<li>
A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries. </li>
</ul>
<p>The arrows have the following meaning: </p>
<ul>
<li>
A blue arrow is used to visualize a public inheritance relation between two classes. </li>
<li>
A dark green arrow is used for protected inheritance. </li>
<li>
A dark red arrow is used for private inheritance. </li>
<li>
A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible. </li>
<li>
A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance. </li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1 @@
f74606a252eb303675caf37987d0b7af
Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

+159
View File
@@ -0,0 +1,159 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: KTX Tools Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('index.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">KTX Tools Reference </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>There are two sets of tools: a new set with a unified front end, <a class="el" href="ktx.html" title="ktx">ktx</a>, and an older set of individual tools. Both are documented here.</p>
<h2 class="doxsection"><a class="anchor" id="autotoc_md0"></a>
ktx Overview</h2>
<p><a class="el" href="ktx.html" title="ktx">ktx</a> includes the following tools:</p>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadLeft">Tool </th><th class="markdownTableHeadNone">Description </th><th class="markdownTableHeadNone">Equivalent old tool </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyLeft"><a class="el" href="ktx_compare.html" title="ktx compare">ktx compare</a> </td><td class="markdownTableBodyNone">Compare two KTX2 files. </td><td class="markdownTableBodyNone"></td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyLeft"><a class="el" href="ktx_create.html" title="ktx create">ktx create</a> </td><td class="markdownTableBodyNone">Create a KTX2 file from various input files </td><td class="markdownTableBodyNone"><span class="tt">toktx</span> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyLeft"><a class="el" href="ktx_deflate.html" title="ktx deflate">ktx deflate</a> </td><td class="markdownTableBodyNone">Deflate (supercompress) a KTX2 file. </td><td class="markdownTableBodyNone"><span class="tt">ktxsc</span> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyLeft"><a class="el" href="ktx_extract.html" title="ktx extract">ktx extract</a> </td><td class="markdownTableBodyNone">Export selected images from a KTX2 file </td><td class="markdownTableBodyNone">- </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyLeft"><a class="el" href="ktx_encode.html" title="ktx encode">ktx encode</a> </td><td class="markdownTableBodyNone">Encode a KTX2 file </td><td class="markdownTableBodyNone"><span class="tt">ktxsc</span> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyLeft"><a class="el" href="ktx_info.html" title="ktx info">ktx info</a> </td><td class="markdownTableBodyNone">Prints information about a KTX2 file </td><td class="markdownTableBodyNone"><span class="tt">ktxinfo</span> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyLeft"><a class="el" href="ktx_transcode.html" title="ktx transcode">ktx transcode</a> </td><td class="markdownTableBodyNone">Transcode a KTX2 file </td><td class="markdownTableBodyNone">- </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyLeft"><a class="el" href="ktx_validate.html" title="ktx validate">ktx validate</a> </td><td class="markdownTableBodyNone">Validate a KTX2 file </td><td class="markdownTableBodyNone"><span class="tt">ktx2check</span> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyLeft"><a class="el" href="ktx_help.html" title="ktx help">ktx help</a> </td><td class="markdownTableBodyNone">Display help information about the ktx tools </td><td class="markdownTableBodyNone">- </td></tr>
</table>
<p>Equivalent old tools are deprecated and will be removed soon.</p>
<p>Some features of old tools are not currently available in the new equivalent.</p>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadCenter">Old Tool </th><th class="markdownTableHeadCenter">New Tool </th><th class="markdownTableHeadNone">Missing Features </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyCenter"><a class="el" href="toktx.html" title="toktx">toktx</a> </td><td class="markdownTableBodyCenter"><a class="el" href="ktx_create.html" title="ktx create">create</a> </td><td class="markdownTableBodyNone">JPEG and NBPM input. </td></tr>
</table>
<p>The command-line syntax and semantics differ from the old tools including, but not limited to:</p>
<ul>
<li>KTX 1.0 files are not supported by the new tools.</li>
<li>Words in multi-word option names are connected with <span class="tt">-</span> instead of <span class="tt">_</span>.</li>
<li>Individual option names may differ between the old and new tools.</li>
<li>The <span class="tt">ktx validate</span> tool may be stricter than <span class="tt">ktx2check</span> or otherwise differ in behavior, as the new tool enforces all rules of the KTX 2.0 specification. In addition, all new tools that accept KTX 2.0 files as input will be validated in a similar fashion as they would be with the <span class="tt">ktx validate</span> tool and will fail on the first specification rule violation, if there is one. It also has the option to output the validation results in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the <span class="tt">--format</span> command-line option.</li>
<li>The <span class="tt">ktx validate</span> tool also supports validating KTX 2.0 files against the additional restrictions defined by the <em>KHR_texture_basisu</em> extension. Use the <span class="tt">--gltf-basisu</span> command-line option to verify glTF and WebGL compatibility.</li>
<li>The new <span class="tt">ktx info</span> tool produces a unified and complete output of all metadata in KTX 2.0 files and can provide output in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the <span class="tt">--format</span> command-line option.</li>
<li>The source repository also includes the JSON schemas that the JSON outputs of the <span class="tt">ktx info</span> and <span class="tt">ktx validate</span> tools comply to.</li>
<li>The <span class="tt">ktx create</span> tool takes an explicit Vulkan format argument (<span class="tt">--format</span>) instead of inferring the format based on the provided input files as <span class="tt">toktx</span>, and thus doesn't perform any implicit color-space conversions except gamma 2.2 to sRGB. Use the <span class="tt">--assign-tf</span>, <span class="tt">--convert-tf</span>, <span class="tt">--assign-primaries</span>, and the new <span class="tt">--convert-primaries</span> for fine grained control over color-space interpretation and conversion.</li>
<li>The <span class="tt">ktx create</span> tool does not support resizing or scaling like <span class="tt">toktx</span>, and, in general, does not perform any image transformations except the optional color-space conversion and mipmap generation options. Users should resize input images to the appropriate resolution before converting them to KTX 2.0 files.</li>
<li>The <span class="tt">ktx create</span> and <span class="tt">ktx extract</span> tools consume and produce, respectively, image file formats that best suit the used Vulkan format. In general, barring special cases, 8-bit and 16-bit normalized integer formats are imported from and exported to PNG files, while integer and floating point formats are imported from and exported to EXR files based on predefined rules. This may be extended in the future using additional command line options and in response to support for other image file formats.</li>
<li>The new tools and updated <span class="tt">libktx</span> support ZLIB supercompression besides the BasisLZ and Zstd supercompression schemes supported previously.</li>
</ul>
<p>Please refer to the manual pages or use the <span class="tt">--help</span> command-line option for further details on the options available and associated semantics for each individual command.</p>
<hr />
<dl class="section user"><dt>This page last modified $Date$</dt><dd></dd></dl>
</div></div><!-- PageDoc -->
<a href="doxygen_crawl.html"></a>
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
+204
View File
@@ -0,0 +1,204 @@
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}
var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},
push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(
e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,
O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp(
"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType
}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c
)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){
return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(
":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id")
)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push(
"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(
a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,
null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(
"string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne
).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType
)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(
function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){
return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);
for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n
){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(
e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);
break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(
function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){
for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(
this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(
var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){
return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(
){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),
S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,
r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,
o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(
"object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){
var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),
1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){
Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t
){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c
].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;
return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),
"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n
)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,
f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(
arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i
]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(
e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;
this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t
}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,
r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),
r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){
1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(
"string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t
,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(
l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[
0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(
!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(
e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(
e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(
this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},
S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),
originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}
S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(
le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),
null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"
],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},
S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{
set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o
)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(
" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;
t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode
,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),
e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(
new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};
var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();
return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",
isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(
t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global
)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(
v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();
while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))
}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),
t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){
return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(
e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r]
,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(
function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,
"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}
),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each(
"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){
return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
/*! jQuery UI - v1.13.2 - 2022-08-01
* http://jqueryui.com
* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(y){"use strict";y.ui=y.ui||{};y.ui.version="1.13.2";var n,i=0,h=Array.prototype.hasOwnProperty,a=Array.prototype.slice;y.cleanData=(n=y.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=y._data(i,"events"))&&e.remove&&y(i).triggerHandler("remove");n(t)}),y.widget=function(t,i,e){var s,n,o,h={},a=t.split(".")[0],r=a+"-"+(t=t.split(".")[1]);return e||(e=i,i=y.Widget),Array.isArray(e)&&(e=y.extend.apply(null,[{}].concat(e))),y.expr.pseudos[r.toLowerCase()]=function(t){return!!y.data(t,r)},y[a]=y[a]||{},s=y[a][t],n=y[a][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},y.extend(n,s,{version:e.version,_proto:y.extend({},e),_childConstructors:[]}),(o=new i).options=y.widget.extend({},o.options),y.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}
function o(t){return i.prototype[e].apply(this,t)}h[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=y.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},h,{constructor:n,namespace:a,widgetName:t,widgetFullName:r}),s?(y.each(s._childConstructors,function(t,e){var i=e.prototype;y.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),y.widget.bridge(t,n),n},y.widget.extend=function(t){for(var e,i,s=a.call(arguments,1),n=0,o=s.length;n<o;n++)for(e in s[n])i=s[n][e],h.call(s[n],e)&&void 0!==i&&(y.isPlainObject(i)?t[e]=y.isPlainObject(t[e])?y.widget.extend({},t[e],i):y.widget.extend({},i):t[e]=i);return t},y.widget.bridge=function(o,e){var h=e.prototype.widgetFullName||o;y.fn[o]=function(i){var t="string"==typeof i,s=a.call(arguments,1),n=this;return t?this.length||"instance"!==i?this.each(function(){var t,
e=y.data(this,h);return"instance"===i?(n=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?y.error("no such method '"+i+"' for "+o+" widget instance"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:y.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):n=void 0:(s.length&&(i=y.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=y.data(this,h);t?(t.option(i||{}),t._init&&t._init()):y.data(this,h,new e(i,this))})),n}},y.Widget=function(){},y.Widget._childConstructors=[],y.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t
){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t
]=y.widget.extend({},this.options[t]),n=0;n<i.length-1;n++)s[i[n]]=s[i[n]]||{},s=s[i[n]];if(t=i.pop(),1===arguments.length)return void 0===s[t]?null:s[t];s[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,s;for(e in t)s=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&s&&s.length&&(i=y(s.get()),this._removeClass(s,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},
disable:function(){return this._setOptions({disabled:!0})},_classes:function(n){var o=[],h=this;function t(t,e){for(var i,s=0;s<t.length;s++)i=h.classesElementLookup[t[s]]||y(),i=n.add?(function(){var i=[];n.element.each(function(t,e){y.map(h.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||i.push(e)}),h._on(y(i),{remove:"_untrackClassesElement"})}(),y(y.uniqueSort(i.get().concat(n.element.get())))):y(i.not(n.element).get()),h.classesElementLookup[t[s]]=i,o.push(t[s]),e&&n.classes[t[s]]&&o.push(n.classes[t[s]])}return(n=y.extend({element:this.element,classes:this.options.classes||{}},n)).keys&&t(n.keys.match(/\S+/g)||[],!0),n.extra&&t(n.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var s=this;y.each(s.classesElementLookup,function(t,e){-1!==y.inArray(i.target,e)&&(s.classesElementLookup[t]=y(e.not(i.target).get()))}),this._off(y(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){
return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n="string"==typeof t||null===t,i={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s="boolean"==typeof s?s:i};return i.element.toggleClass(this._classes(i),s),this},_on:function(n,o,t){var h,a=this;"boolean"!=typeof n&&(t=o,o=n,n=!1),t?(o=h=y(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,h=this.widget()),y.each(t,function(t,e){function i(){if(n||!0!==a.options.disabled&&!y(this).hasClass("ui-state-disabled"))return("string"==typeof e?a[e]:e).apply(a,arguments)}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||y.guid++);var s=t.match(/^([\w:-]*)\s*(.*)$/),t=s[1]+a.eventNamespace,s=s[2];s?h.on(t,s,i):o.on(t,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e),this.bindings=y(this.bindings.not(t).get()),this.focusable=y(this.focusable.not(t).get()),this.hoverable=y(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return(
"string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(y(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(y(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(y(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(y(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var s,n,o=this.options[t];if(i=i||{},(e=y.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(s in n)s in e||(e[s]=n[s]);return this.element.trigger(e,i),!("function"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},y.each({show:"fadeIn",hide:"fadeOut"},function(o,h){y.Widget.prototype["_"+o]=function(e,t,i){var s,n=(t="string"==typeof t?{effect:t}:t
)?!0!==t&&"number"!=typeof t&&t.effect||h:o;"number"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),s=!y.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),s&&y.effects&&y.effects.effect[n]?e[o](t):n!==o&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){y(this)[o](),i&&i.call(e[0]),t()})}});var s,x,D,o,r,l,u,p,W;y.widget;function E(t,e,i){return[parseFloat(t[0])*(p.test(t[0])?e/100:1),parseFloat(t[1])*(p.test(t[1])?i/100:1)]}function H(t,e){return parseInt(y.css(t,e),10)||0}function S(t){return null!=t&&t===t.window}x=Math.max,D=Math.abs,o=/left|center|right/,r=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,u=/^\w+/,p=/%$/,W=y.fn.position,y.position={scrollbarWidth:function(){if(void 0!==s)return s;var t,e=y("<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},
getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.width<t.element[0].scrollWidth;return{width:"scroll"===i||"auto"===i&&t.height<t.element[0].scrollHeight?y.position.scrollbarWidth():0,height:e?y.position.scrollbarWidth():0}},getWithinInfo:function(t){var e=y(t||window),i=S(e[0]),s=!!e[0]&&9===e[0].nodeType;return{element:e,isWindow:i,isDocument:s,offset:!i&&!s?y(t).offset():{left:0,top:0},scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop(),width:e.outerWidth(),height:e.outerHeight()}}},y.fn.position=function(p){if(!p||!p.of)return W.apply(this,arguments);var d,c,f,g,m,t,_="string"==typeof(p=y.extend({},p)).of?y(document).find(p.of):y(p.of),w=y.position.getWithinInfo(p.within),v=y.position.getScrollInfo(w),b=(p.collision||"flip").split(" "),z={},e=9===(t=(e=_)[0]).nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:S(t)?{width:e.width(),height:e.height(),offset:{
top:e.scrollTop(),left:e.scrollLeft()}}:t.preventDefault?{width:0,height:0,offset:{top:t.pageY,left:t.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()};return _[0].preventDefault&&(p.at="left top"),c=e.width,f=e.height,m=y.extend({},g=e.offset),y.each(["my","at"],function(){var t,e,i=(p[this]||"").split(" ");(i=1===i.length?o.test(i[0])?i.concat(["center"]):r.test(i[0])?["center"].concat(i):["center","center"]:i)[0]=o.test(i[0])?i[0]:"center",i[1]=r.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),z[this]=[t?t[0]:0,e?e[0]:0],p[this]=[u.exec(i[0])[0],u.exec(i[1])[0]]}),1===b.length&&(b[1]=b[0]),"right"===p.at[0]?m.left+=c:"center"===p.at[0]&&(m.left+=c/2),"bottom"===p.at[1]?m.top+=f:"center"===p.at[1]&&(m.top+=f/2),d=E(z.at,c,f),m.left+=d[0],m.top+=d[1],this.each(function(){var i,t,h=y(this),a=h.outerWidth(),r=h.outerHeight(),e=H(this,"marginLeft"),s=H(this,"marginTop"),n=a+e+H(this,"marginRight")+v.width,o=r+s+H(this,"marginBottom")+v.height,l=y.extend({},m),u=E(z.my,h.outerWidth()
,h.outerHeight());"right"===p.my[0]?l.left-=a:"center"===p.my[0]&&(l.left-=a/2),"bottom"===p.my[1]?l.top-=r:"center"===p.my[1]&&(l.top-=r/2),l.left+=u[0],l.top+=u[1],i={marginLeft:e,marginTop:s},y.each(["left","top"],function(t,e){y.ui.position[b[t]]&&y.ui.position[b[t]][e](l,{targetWidth:c,targetHeight:f,elemWidth:a,elemHeight:r,collisionPosition:i,collisionWidth:n,collisionHeight:o,offset:[d[0]+u[0],d[1]+u[1]],my:p.my,at:p.at,within:w,elem:h})}),p.using&&(t=function(t){var e=g.left-l.left,i=e+c-a,s=g.top-l.top,n=s+f-r,o={target:{element:_,left:g.left,top:g.top,width:c,height:f},element:{element:h,left:l.left,top:l.top,width:a,height:r},horizontal:i<0?"left":0<e?"right":"center",vertical:n<0?"top":0<s?"bottom":"middle"};c<a&&D(e+i)<c&&(o.horizontal="center"),f<r&&D(s+n)<f&&(o.vertical="middle"),x(D(e),D(i))>x(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,
s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0<h&&a<=0?(i=t.left+h+e.collisionWidth-n-s,t.left+=h-i):t.left=!(0<a&&h<=0)&&a<h?s+n-e.collisionWidth:s:0<h?t.left+=h:0<a?t.left-=a:t.left=x(t.left-o,t.left)},top:function(t,e){var i=e.within,s=i.isWindow?i.scrollTop:i.offset.top,n=e.within.height,o=t.top-e.collisionPosition.marginTop,h=s-o,a=o+e.collisionHeight-n-s;e.collisionHeight>n?0<h&&a<=0?(i=t.top+h+e.collisionHeight-n-s,t.top+=h-i):t.top=!(0<a&&h<=0)&&a<h?s+n-e.collisionHeight:s:0<h?t.top+=h:0<a?t.top-=a:t.top=x(t.top-o,t.top)}},flip:{left:function(t,e){var i=e.within,s=i.offset.left+i.scrollLeft,n=i.width,o=i.isWindow?i.scrollLeft:i.offset.left,h=t.left-e.collisionPosition.marginLeft,a=h-o,r=h+e.collisionWidth-n-o,l="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,i="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,h=-2*e.offset[0];a<0?((s=t.left+l+i+h+e.collisionWidth-n-s)<0||s<D(a)
)&&(t.left+=l+i+h):0<r&&(0<(o=t.left-e.collisionPosition.marginLeft+l+i+h-o)||D(o)<r)&&(t.left+=l+i+h)},top:function(t,e){var i=e.within,s=i.offset.top+i.scrollTop,n=i.height,o=i.isWindow?i.scrollTop:i.offset.top,h=t.top-e.collisionPosition.marginTop,a=h-o,r=h+e.collisionHeight-n-o,l="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,i="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,h=-2*e.offset[1];a<0?((s=t.top+l+i+h+e.collisionHeight-n-s)<0||s<D(a))&&(t.top+=l+i+h):0<r&&(0<(o=t.top-e.collisionPosition.marginTop+l+i+h-o)||D(o)<r)&&(t.top+=l+i+h)}},flipfit:{left:function(){y.ui.position.flip.left.apply(this,arguments),y.ui.position.fit.left.apply(this,arguments)},top:function(){y.ui.position.flip.top.apply(this,arguments),y.ui.position.fit.top.apply(this,arguments)}}};var t;y.ui.position,y.extend(y.expr.pseudos,{data:y.expr.createPseudo?y.expr.createPseudo(function(e){return function(t){return!!y.data(t,e)}}):function(t,e,i){return!!y.data(t,i[3])}}),y.fn.extend({
disableSelection:(t="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}),enableSelection:function(){return this.off(".ui-disableSelection")}});y.ui.focusable=function(t,e){var i,s,n,o,h=t.nodeName.toLowerCase();return"area"===h?(s=(i=t.parentNode).name,!(!t.href||!s||"map"!==i.nodeName.toLowerCase())&&(0<(s=y("img[usemap='#"+s+"']")).length&&s.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(h)?(n=!t.disabled)&&(o=y(t).closest("fieldset")[0])&&(n=!o.disabled):n="a"===h&&t.href||e,n&&y(t).is(":visible")&&function(t){var e=t.css("visibility");for(;"inherit"===e;)t=t.parent(),e=t.css("visibility");return"visible"===e}(y(t)))},y.extend(y.expr.pseudos,{focusable:function(t){return y.ui.focusable(t,null!=y.attr(t,"tabindex"))}});var e,d;y.ui.focusable,y.fn._form=function(){return"string"==typeof this[0].form?this.closest("form"):y(this[0].form)},y.ui.formResetMixin={_formResetHandler:function(
){var e=y(this);setTimeout(function(){var t=e.data("ui-form-reset-instances");y.each(t,function(){this.refresh()})})},_bindFormResetHandler:function(){var t;this.form=this.element._form(),this.form.length&&((t=this.form.data("ui-form-reset-instances")||[]).length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t))},_unbindFormResetHandler:function(){var t;this.form.length&&((t=this.form.data("ui-form-reset-instances")).splice(y.inArray(this,t),1),t.length?this.form.data("ui-form-reset-instances",t):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset"))}};y.expr.pseudos||(y.expr.pseudos=y.expr[":"]),y.uniqueSort||(y.uniqueSort=y.unique),y.escapeSelector||(e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,d=function(t,e){return e?"\0"===t?"":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},y.escapeSelector=function(t){return(t+"").replace(e,d)}),y.fn.even&&y.fn.odd||y.fn.extend({even:function(){
return this.filter(function(t){return t%2==0})},odd:function(){return this.filter(function(t){return t%2==1})}});y.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},y.fn.labels=function(){var t,e,i;return this.length?this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(e=this.eq(0).parents("label"),(t=this.attr("id"))&&(i=(i=this.eq(0).parents().last()).add((i.length?i:this).siblings()),t="label[for='"+y.escapeSelector(t)+"']",e=e.add(i.find(t).addBack(t))),this.pushStack(e)):this.pushStack([])},y.fn.scrollParent=function(t){var e=this.css("position"),i="absolute"===e,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/,t=this.parents().filter(function(){var t=y(this);return(!i||"static"!==t.css("position"))&&s.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==e&&t.length?t:y(this[0].ownerDocument||document)},y.extend(y.expr.pseudos,{tabbable:function(t){
var e=y.attr(t,"tabindex"),i=null!=e;return(!i||0<=e)&&y.ui.focusable(t,i)}}),y.fn.extend({uniqueId:(c=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++c)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&y(this).removeAttr("id")})}}),y.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var c,f=!1;y(document).on("mouseup",function(){f=!1});y.widget("ui.mouse",{version:"1.13.2",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(t){if(!0===y.data(t.target,e.widgetName+".preventClickEvent"))return y.removeData(t.target,e.widgetName+".preventClickEvent"),t.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off(
"mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!f){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,s=!("string"!=typeof this.options.cancel||!t.target.nodeName)&&y(t.target).closest(this.options.cancel).length;return i&&!s&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?(t.preventDefault(),!0):(!0===y.data(t.target,this.widgetName+".preventClickEvent")&&y.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),f=!0)):!0}},
_mouseMove:function(t){if(this._mouseMoved){if(y.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button)return this._mouseUp(t);if(!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&y.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),
delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,f=!1,t.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n<o.length;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}};y.widget("ui.resizable",y.ui.mouse,{version:"1.13.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,
handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(t,e){if("hidden"===y(t).css("overflow"))return!1;var i=e&&"left"===e?"scrollLeft":"scrollTop",e=!1;if(0<t[i])return!0;try{t[i]=1,e=0<t[i],t[i]=0}catch(t){}return e},_create:function(){var t,e=this.options,i=this;this._addClass("ui-resizable"),y.extend(this,{_aspectRatio:!!e.aspectRatio,aspectRatio:e.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:e.helper||e.ghost||e.animate?e.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(y("<div class='ui-wrapper'></div>").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),
this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t
).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(
","),this.handles={},e=0;e<i.length;e++)s="ui-resizable-"+(t=String.prototype.trim.call(i[e])),n=y("<div>"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(
this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{
width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),
!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){
this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),s<n.maxWidth&&(n.maxWidth=s),t<n.maxHeight&&(n.maxHeight=t)
),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height
,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({
height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,e=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||y("<div></div>").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,
i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left
)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e
){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),
i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth(
)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,
function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0
]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidth<d,g=i.maxHeight&&i.maxHeight<c,m=i.minWidth&&i.minWidth>d,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0<c-l?(e.size.height=c,e.position.top=o.top-p):(c=l-t.height,e.size.height=c,e.position.top=o.top+n.height-c),0<d-r?(e.size.width=d,e.position.left=o.left-u):(d=r-t.width,e.size.width=d,e.position.left=o.left+n.width-d))}});y.ui.resizable});
/**
* Copyright (c) 2007 Ariel Flesler - aflesler gmail com | https://github.com/flesler
* Licensed under MIT
* @author Ariel Flesler
* @version 2.1.2
*/(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"===typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9e9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case"number":case"string":if(
/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e=h(e);break}e=l?$(e):$(e,q);case"object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&&"%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};
$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()},set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
/*!
PowerTip v1.3.1 (2018-04-15)
https://stevenbenner.github.io/jquery-powertip/
Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).
Released under MIT license.
https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
*/
(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,
delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){
targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se",
"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(
session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}
closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;
openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2
);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left",
position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth;
top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(
placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(
session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,
function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);
tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,
finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));
return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}
function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),
elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,
viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});
/*!
* jQuery UI Touch Punch 0.2.3
*
* Copyright 20112014, Dave Furfero
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Depends:
* jquery.ui.widget.js
* jquery.ui.mouse.js
*/!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,
"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);
/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
* http://www.smartmenus.org/
* Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),
mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend(
$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(
this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData(
"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id"
).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(
this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(
var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){
return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((
!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(
this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0
]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass(
"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){
t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]"
)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){
t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),
a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(
e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,
downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2)
)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t
)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),
canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},
rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}
return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,
bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});
+173
View File
@@ -0,0 +1,173 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Unified CLI frontend for the KTX-Software library.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_synopsis"></a>
SYNOPSIS</h1>
<p>ktx &lt;command&gt; [command-option...]<br />
ktx [option...]</p>
<h1 class="doxsection"><a class="anchor" id="ktx_description"></a>
DESCRIPTION</h1>
<p>Unified CLI frontend for the KTX-Software library with sub-commands for specific operations for the KTX File Format Specification <a href="https://registry.khronos.org/KTX/specs/2.0/ktxspec.v2.html">https://registry.khronos.org/KTX/specs/2.0/ktxspec.v2.html</a>.</p>
<p>The following commands are available: </p><dl>
<dt><a class="el" href="ktx_create.html" title="ktx create">create</a> </dt>
<dd>Create a KTX2 file from various input files. </dd>
<dt><a class="el" href="ktx_deflate.html" title="ktx deflate">deflate</a> </dt>
<dd>Deflate (supercompress) a KTX2 file. </dd>
<dt><a class="el" href="ktx_extract.html" title="ktx extract">extract</a> </dt>
<dd>Extract selected images from a KTX2 file. </dd>
<dt><a class="el" href="ktx_encode.html" title="ktx encode">encode</a> </dt>
<dd>Encode a KTX2 file. </dd>
<dt><a class="el" href="ktx_transcode.html" title="ktx transcode">transcode</a> </dt>
<dd>Transcode a KTX2 file. </dd>
<dt><a class="el" href="ktx_info.html" title="ktx info">info</a> </dt>
<dd>Print information about a KTX2 file. </dd>
<dt><a class="el" href="ktx_validate.html" title="ktx validate">validate</a> </dt>
<dd>Validate a KTX2 file. </dd>
<dt><a class="el" href="ktx_compare.html" title="ktx compare">compare</a> </dt>
<dd>Compare two KTX2 files. </dd>
<dt><a class="el" href="ktx_help.html" title="ktx help">help</a> </dt>
<dd>Display help information about the ktx tool. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx_main_options"></a>
OPTIONS</h1>
<p>The following options are also available without a command: </p><dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx_exitstatus"></a>
EXIT STATUS</h1>
<ul>
<li>0 - Success</li>
<li>1 - Command line error</li>
<li>2 - IO failure</li>
<li>3 - Invalid input file</li>
<li>4 - Runtime or library error</li>
<li>5 - Not supported state or operation</li>
<li>6 - Requested feature is not yet implemented </li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_author"></a>
AUTHOR</h1>
<ul>
<li>Mátyás Császár [Vader], RasterGrid www.rastergrid.com</li>
<li>Daniel Rákos, RasterGrid www.rastergrid.com </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
+147
View File
@@ -0,0 +1,147 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx2check</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx2check.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx2check </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Check the validity of a KTX 2 file.</p>
<h1 class="doxsection"><a class="anchor" id="ktx2check_synopsis"></a>
SYNOPSIS</h1>
<p>ktx2check [options] [<em>infile</em> ...]</p>
<h1 class="doxsection"><a class="anchor" id="ktx2check_description"></a>
DESCRIPTION</h1>
<p><b>ktx2check</b> validates Khronos texture format version 2 files (KTX2). It reads each named <em>infile</em> and validates it writing to stdout messages about any issues found. When <b>infile</b> is not specified, it validates a single file from stdin.</p>
<p>The following options are available: </p><dl>
<dt>-q, --quiet </dt>
<dd>Validate silently. Indicate valid or invalid via exit code. </dd>
<dt>-m &lt;num&gt;, &ndash;max-issues &lt;num&gt; </dt>
<dd>Set the maximum number of issues to be reported per file provided -q is not set. </dd>
<dt>-w, --warn-as-error </dt>
<dd>Treat warnings as errors. Changes exit code from success to error. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx2check_exitstatus"></a>
EXIT STATUS</h1>
<p><b>ktx2check</b> exits 0 on success, 1 on command line errors and 2 on validation errors.</p>
<h1 class="doxsection"><a class="anchor" id="ktx2check_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version.</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx2check_author"></a>
AUTHOR</h1>
<p>Mark Callow, github.com/MarkCallow </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
+148
View File
@@ -0,0 +1,148 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx2ktx2</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx2ktx2.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx2ktx2 </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Create a KTX 2 file from a KTX file.</p>
<h1 class="doxsection"><a class="anchor" id="ktx2ktx2_synopsis"></a>
SYNOPSIS</h1>
<p>ktx2ktx2 [options] [<em>infile</em> ...]</p>
<h1 class="doxsection"><a class="anchor" id="ktx2ktx2_description"></a>
DESCRIPTION</h1>
<p><b>ktx2ktx2</b> creates Khronos texture format version 2 files (KTX2) from Khronos texture format version 1 files. <b>ktx2ktx2</b> reads each named <em>infile</em>. Output files have the same name as the input but with the extension changed to <code></code>.ktx2. When <b>infile</b> is not specified, a single file will be read from stdin and the output written to standard out.</p>
<p>If unrecognized metadata with keys beginning "KTX" or "ktx" is found in the input file, it is dropped and a warning is written to standard error.</p>
<p>The following options are available: </p><dl>
<dt>-b, --rewritebado </dt>
<dd>Rewrite bad orientation metadata. Some in-the-wild KTX files have orientation metadata with the key "KTXOrientation" instead of KTXorientaion. This option will rewrite such bad metadata instead of dropping it. </dd>
<dt>-o outfile, &ndash;output=outfile </dt>
<dd>Name the output file <em>outfile</em>. If <em>outfile</em> is 'stdout', output will be written to stdout. If there is more than 1 input file, the command prints its usage message and exits. </dd>
<dt>-f, --force </dt>
<dd>If the destination file already exists, remove it and create a new file, without prompting for confirmation regardless of its permissions. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx2ktx2_exitstatus"></a>
EXIT STATUS</h1>
<p><b>ktx2ktx2</b> exits 0 on success, 1 on command line errors and 2 on functional errors.</p>
<h1 class="doxsection"><a class="anchor" id="ktx2ktx2_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version.</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx2ktx2_author"></a>
AUTHOR</h1>
<p>Mark Callow, github.com/MarkCallow </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,243 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx compare</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx_compare.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx compare </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Compare two KTX2 files.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_compare_synopsis"></a>
SYNOPSIS</h1>
<p>ktx compare [option...] <em>input-file1</em> <em>input-file2</em> </p>
<h1 class="doxsection"><a class="anchor" id="ktx_compare_description"></a>
DESCRIPTION</h1>
<p><b>ktx</b> <b>compare</b> compares the two KTX2 files specified as the <em>input-file1</em> and <em>input-file2</em> arguments and outputs any mismatch in texture information and/or image data. The command implicitly calls <a class="el" href="ktx_validate.html" title="ktx validate">validate</a> and prints any found errors and warnings to stdout. If any of the specified input files are invalid then comparison is done based on best effort and may be incomplete.</p>
<p>The JSON output formats conform to the <a href="https://schema.khronos.org/ktx/compare_v0.json">https://schema.khronos.org/ktx/compare_v0.json</a> schema even if the input file is invalid and certain information cannot be parsed or displayed. Additionally, for JSON outputs the KTX file identifier is printed using "\u001A" instead of "\x1A" as an unescaped "\x1A" sequence inside a JSON string breaks nearly every JSON tool. Note that this does not change the value of the string only its representation.</p>
<dl class="section note"><dt>Note</dt><dd><b>ktx</b> <b>compare</b> prints using UTF-8 encoding. If your console is not set for UTF-8 you will see incorrect characters in output of the file identifier on each side of the "KTX nn".</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_compare_options"></a>
OPTIONS</h1>
<p>The following options are available: </p><dl>
<dt>--format text | json | mini-json </dt>
<dd>Specifies the report output format. Possible options are: <br />
<b>text</b> - Human readable text based format. <br />
<b>json</b> - Formatted JSON. <br />
<b>mini-json</b> - Minified JSON. <br />
The default format is <b>text</b>. </dd>
</dl>
<dl>
<dt>--content raw | image | ignore </dt>
<dd>Controls how image content is compared. Possible options are: <br />
<b>raw</b> - Encoded image data is compared verbatim, as it appears in the file. <br />
<b>image</b> - Effective image data is compared per texel block. <br />
<b>ignore</b> - Ignore image contents. <br />
The default mode is <b>raw</b>, meaning that the encoded image data must match exactly. Note: When the mode is set to <b>image</b>, the effective image data of individual mip levels, layers, and faces is compared texel block by texel block after applying one or more of the following transformations, if needed: <br />
- If the texture is supercompressed (e.g. using Zstandard or ZLIB), the images are deflated before comparison. <br />
- If the texture is encoded using BasisLZ, the images are transcoded to R8G8B8A_UNORM before comparison. <br />
For block compressed textures and textures encoded using UASTC the texel blocks are the individual compressed blocks, while for other formats the texel blocks are the individual pixels of the image. <br />
When comparing files that use different supercompression schemes, or otherwise different encoding, additional options may need to be used to avoid unexpected differences to be reported related to the meta information of the files. For example: <br />
- The supercompression scheme can be ignored with &ndash;ignore-supercomp. <br />
- Compressed byte length and other index section differences can be ignored with &ndash;ignore-index all or &ndash;ignore-index level. <br />
- DFD section differences can be ignored with &ndash;ignore-dfd all or &ndash;ignore-dfd all-except-color-space. <br />
- BDFD bytesPlane value differences can be ignored with &ndash;ignore-bdfd-bytesplane. <br />
- SGD section differences can be ignored with &ndash;ignore-sgd all or &ndash;ignore-sgd payload. <br />
</dd>
<dt>--per-pixel-output all | &lt;number&gt; | none </dt>
<dd>Controls whether per pixel / texel block difference output is generated when &ndash;content is set to <b>image:</b> <br />
<b>all</b> - Every single difference is output (may result in a very large output). <br />
<b>&lt;number&gt;</b> - At most the specified number of differences are output. <br />
<b>none</b> - No per pixel / texel block differences are output. <br />
The default mode is <b>none</b> to limit the verbosity of the output. </dd>
<dt>--allow-invalid-input </dt>
<dd>Perform best effort comparison even if any of the input files are invalid. </dd>
<dt>--ignore-format-header</dt>
<dd></dd>
<dt></dt>
<dd>Ignore the vkFormat and typeSize fields in the file header. <br />
Note: useful when comparing textures with and without BasisLZ encoding, respectively. </dd>
<dt>--ignore-supercomp </dt>
<dd>Ignore supercompression scheme in the file header. <br />
Note: use the &ndash;ignore-sgd option to also ignore the SGD section, if needed. </dd>
<dt>--ignore-index all | level | none </dt>
<dd>Controls the comparison of index entries in the file headers. Possible options are: <br />
<b>all</b> - Ignore all index entries. <br />
<b>level</b> - Ignore level index entries only. <br />
<b>none</b> - Do not ignore any index entries. <br />
The default mode is <b>none</b>, meaning that all index entries will be compared. </dd>
<dt>--ignore-dfd all | all-except-color-space | unknown | extended | none </dt>
<dd>Controls the comparison of DFD blocks. Possible options are: <br />
<b>all</b> - Ignore all DFD blocks. <br />
<b>all-except-color-space</b>: Ignore all DFD blocks except the color space information in the basic DFD block. <br />
<b>unknown</b> - Ignore any unrecognized DFD blocks. <br />
<b>extended</b> - Ignore all DFD blocks except the basic DFD block. <br />
<b>none</b> - Do not ignore any DFD blocks. <br />
The default mode is <b>none</b>, meaning that all DFD entries will be compared. </dd>
<dt>--ignore-bdfd-bytesplane </dt>
<dd>Ignore BDFD bytesPlane values. Useful when comparing pre-spec-2.0.4 supercompressed files with 2.0.4+ supercompressed or non-supercompressed ones, as bytesPlane is set to zero in older supercompressed files. </dd>
<dt>--ignore-metadata all | &lt;key&gt;[,...] | none </dt>
<dd>Controls the comparison of metadata (KVD) entries. Possible options are: <br />
<b>all</b> - Ignore all metadata entries. <br />
<b>&lt;key&gt;</b>[,...] - Ignore the specified comma separated list of metadata keys. <br />
<b>none</b> - Do not ignore any metadata entries. <br />
The default mode is <b>none</b>, meaning that all metadata entries will be compared. </dd>
<dt>--ignore-sgd all | unknown | payload | none </dt>
<dd>Controls the comparison of the SGD section. Possible options are: <br />
<b>all</b> - Ignore the SGD section. <br />
<b>unknown</b> - Ignore any unrecognized SGD section. <br />
<b>payload</b> - Ignore any unrecognized SGD section and the payload of any known SGD section. <br />
<b>none</b> - Do not ignore the SGD section. <br />
The default mode is <b>none</b>, meaning that SGD sections will be always compared. Note: &ndash;ignore-sgd payload can be used to compare BasisLZ SGD headers without expecting an exact match for the individual SGD payload sections. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<pre class="fragment">@note Reports about image content mismatches when --content is set to @b raw or @b image
include the following information: &lt;br /&gt;
- The level, layer, and face index of the image where the difference was found.
@note Reports about individual texel block differences when --content is set to @b image
include the following additional information: &lt;br /&gt;
- The texel coordinates within the image where the difference was found. These
coordinates are the raw coordinates of the image and are not affected by metadata
such as @b KTXorientation.
- The packed elements of the texel block output as an array of hexadecimal values.
Each packed element has a byte size equal to the @b typeSize value of the image.
- The channel values of the texel block output as an array of integer (for integer
and normalized formats) or floating point (for floating point formats) values.
In case of floating point formats @b NaN, @b +inf, and @b -inf are used to indicate
values that are not a number or represent infinities, respectively.
The output order of the channels always follow the order they appear in the BDFD.
</pre><h1 class="doxsection"><a class="anchor" id="ktx_compare_exitstatus"></a>
EXIT STATUS</h1>
<ul>
<li>0 - Success</li>
<li>1 - Command line error</li>
<li>2 - IO failure</li>
<li>3 - Invalid input file</li>
<li>4 - Runtime or library error</li>
<li>5 - Not supported state or operation</li>
<li>6 - Requested feature is not yet implemented </li>
</ul>
<ul>
<li>7 - Input files are different</li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_compare_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_compare_author"></a>
AUTHOR</h1>
<ul>
<li>Daniel Rákos, RasterGrid www.rastergrid.com </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,463 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx create</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx_create.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx create </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Create a KTX2 file from various input files.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_create_synopsis"></a>
SYNOPSIS</h1>
<p>ktx create [option...] <em>input-file</em>... <em>output-file</em> </p>
<h1 class="doxsection"><a class="anchor" id="ktx_create_description"></a>
DESCRIPTION</h1>
<p><b>ktx</b> <b>create</b> can create, encode and supercompress a KTX2 file from the input images specified as the <em>input-file</em>... arguments and save it as the <em>output-file</em>. The last positional argument is treated as the <em>output-file</em>. If the <em>input-file</em> is '-' the file will be read from the stdin. If the <em>output-path</em> is '-' the output file will be written to the stdout.</p>
<p>Each <em>input-file</em> must be a valid EXR (.exr), PNG (.png) or Raw (.raw) file. PNG files with luminance (L) or luminance + alpha (LA) data will be converted to RGB as LLL and RGBA as LLLA before processing further. The input file formats must be compatible with the requested KTX format enum and must have at least the same level of precision and number of channels. Any unused channel will be discarded silently.</p>
<p>The number of input-files specified must match the expected number of input images based on the used options.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_create_options"></a>
OPTIONS</h1>
<h2 class="doxsection"><a class="anchor" id="ktx_create_options_general"></a>
General Options</h2>
<p>The following are available: </p><dl>
<dt>--format &lt;enum&gt; </dt>
<dd>KTX format enum that specifies the data format for the images in the created texture. The enum names match the VkFormat names without the VK_FORMAT_ prefix. The VK_FORMAT_ prefix is ignored if present. Case insensitive. Required.<br />
<br />
If the format is an ASTC format a texture object with the target format <code>R8G8B8_{SRGB</code>,UNORM} or <code>R8G8B8A8_{SRGB</code>,UNORM} is created then encoded to the specified ASTC format. The latter format is chosen if alpha is present in the input. <code>SRGB</code> or <code>UNORM</code> is chosen depending on the specified ASTC format. The ASTC-specific and common encoder options listed <a class="el" href="#ktx_create_options_encoding" title="Specific and Common Encoding Options">below</a> become valid, otherwise they are ignored. This matches the functionality of the <a class="el" href="ktx_encode.html" title="ktx encode">ktx encode</a> command when an ASTC format is specified.<br />
<br />
When used with <b>--encode</b> it specifies the target format before the encoding step. In this case it must be one of: <ul>
<li>
R8_UNORM </li>
<li>
R8_SRGB </li>
<li>
R8G8_UNORM </li>
<li>
R8G8_SRGB </li>
<li>
R8G8B8_UNORM </li>
<li>
R8G8B8_SRGB </li>
<li>
R8G8B8A8_UNORM </li>
<li>
R8G8B8A8_SRGB </li>
</ul>
The format will be used to verify and load all input files into a texture before performing any specified encoding.<br />
</dd>
<dt>--encode basis-lz | uastc </dt>
<dd><p class="startdd">Encode the texture with the specified codec before saving it. This option matches the functionality of the <a class="el" href="ktx_encode.html" title="ktx encode">ktx encode</a> command. With each choice, the specific and common encoder options listed <a class="el" href="#ktx_create_options_encoding" title="Specific and Common Encoding Options">below</a> become valid, otherwise they are ignored. Case-insensitive.</p>
<dl>
<dt>basis-lz: </dt>
<dd>Supercompress the image data with transcodable ETC1S / BasisLZ. RED images will become RGB with RED in each component (RRR). RG images will have R in the RGB part and G in the alpha part of the compressed texture (RRRG). When set, the <em>basis-lz</em> options become valid. </dd>
<dt>uastc: </dt>
<dd>Create a texture in high-quality transcodable UASTC format. When set the <em>uastc</em> options become valid. </dd>
</dl>
<p class="enddd"></p>
</dd>
<dt>--1d </dt>
<dd>Create a 1D texture. If not set the texture will be a 2D or 3D texture. </dd>
<dt>--cubemap </dt>
<dd>Create a cubemap texture. If not set the texture will be a 2D or 3D texture. </dd>
<dt>--raw </dt>
<dd>Create from raw image data. </dd>
<dt>--width </dt>
<dd>Base level width in pixels. Required with <b>--raw</b>. For non-raw, if not set, the image width is used otherwise the image is resampled to this width and any provided mip levels are resampled proportionately. For non-raw it enables use of the 'Generate Mipmap' options listed under <b>--generate-mipmap</b> to tune the resampler. </dd>
<dt>--height </dt>
<dd>Base level height in pixels. Required with <b>--raw</b>. For non-raw, if not set, the image height is used otherwise the image is resampled to this height and any provided mip levels are resampled proportionately. For non-raw it enables use of the 'Generate Mipmap' options listed under <b>--generate-mipmap</b> to tune the resampler. </dd>
<dt>--depth </dt>
<dd>Base level depth in pixels. If set the texture will be a 3D texture. </dd>
<dt>--layers </dt>
<dd>Number of layers. If set the texture will be an array texture. </dd>
<dt>--levels </dt>
<dd>Number of mip levels. This is the number of level images to include in the texture being created. If <b>--generate-mipmap</b> is specified this number of level images will be generated otherwise this number of input images must be provided. Generates an error if the value is greater than the maximum possible for the specified dimensions of the texture or, for non-raw, the dimensions of the base level image as possibly modified by <b>--scale</b>. </dd>
<dt>--runtime-mipmap </dt>
<dd>Runtime mipmap generation mode. Sets up the texture to request the mipmaps to be generated by the client application at runtime. </dd>
<dt>--generate-mipmap </dt>
<dd>Causes mipmaps to be generated during texture creation. If <b>--levels</b> is not specified the maximum possible mip level will be generated. This option is mutually exclusive with &ndash;runtime-mipmap and cannot be used with SINT, UINT or 3D textures or <b>--raw</b>. When set it enables the use of the following 'Generate Mipmap' options. <dl>
<dt>--mipmap-filter &lt;filter&gt; </dt>
<dd>Specifies the filter to use when generating the mipmaps. Case insensitive. Ignored unless <b>--generate-mipmap</b>, <b>--scale</b>, <b>--width</b> or <b>--height</b> are specified for non-raw input.<br />
Possible options are: box | tent | bell | b-spline | mitchell | blackman | lanczos3 | lanczos4 | lanczos6 | lanczos12 | kaiser | gaussian | catmullrom | quadratic_interp | quadratic_approx | quadratic_mix. Defaults to lanczos4. </dd>
<dt>--mipmap-filter-scale &lt;float&gt; </dt>
<dd>The filter scale to use. Defaults to 1.0. Ignored unless <b>--generate-mipmap</b>, <b>--scale</b>, <b>--width</b> or <b>--height</b> are specified for non-raw input. </dd>
<dt>--mipmap-wrap &lt;mode&gt; </dt>
<dd>Specify how to sample pixels near the image boundaries. Case insensitive. Ignored unless <b>--generate-mipmap</b>, <b>--scale</b>, <b>--width</b> or <b>--height</b> are specified for non-raw input.<br />
Possible options are: wrap | reflect | clamp. Defaults to clamp. </dd>
</dl>
Avoid mipmap generation if the Output TF (see <a class="el" href="#ktx_create_tf_handling" title="TRANSFER FUNCTION HANDLING">TRANSFER FUNCTION HANDLING</a> below) is non-linear and is not sRGB. </dd>
<dt>--scale </dt>
<dd>Scale images as they are loaded. Cannot be used with &ndash;raw. It enables use of the 'Generate Mipmap' options listed under --generate-mipmap to tune the resampler. </dd>
<dt>--normalize </dt>
<dd>Normalize input normals to have a unit length. Only valid for linear normal textures with 2 or more components. For 2-component inputs 2D unit normals are calculated. Do not use these 2D unit normals to generate X+Y normals with <b>--normal-mode</b>. For 4-component inputs a 3D unit normal is calculated. 1.0 is used for the value of the 4th component. Cannot be used with <b>--raw</b>. </dd>
<dt>--swizzle [rgba01]{4} </dt>
<dd>KTX swizzle metadata. </dd>
<dt>--input-swizzle [rgba01]{4} </dt>
<dd>Pre-swizzle input channels. </dd>
<dt>--assign-tf &lt;transfer function&gt; </dt>
<dd>Force the created texture to have the specified transfer function, ignoring the transfer function of the input file(s). Possible options match the khr_df_transfer_e enumerators without the KHR_DF_TRANSFER_ prefix. The KHR_DF_TRANSFER_ prefix is ignored if present. Case nsensitive. The options are: linear | srgb | srgb_eotf | scrgb | scrgb_eotf | itu | itu_oetf | bt601 | bt601_oetf | bt709 | bt709_oetf | bt2020 | bt2020_oetf | smpte170m | smpte170m_oetf | smpte170m_eotf | ntsc | ntsc_eotf | slog | slog_oetf | slog2 | slog2_oetf | bt1886 | bt1886_eotf | hlg_oetf | hlg_eotf | pq_oetf | pg_eotf | dcip3 | dcip3_eotf | pal_oetf | pal625_eotf | st240 | st240_oetf | st240_eotf | acescc | acescc_oetf | acescct | acescct_oetf | abobergb | adobergb_eotf See <a class="el" href="#ktx_create_tf_handling" title="TRANSFER FUNCTION HANDLING">TRANSFER FUNCTION HANDLING</a> below for important information. </dd>
<dt>--assign-oetf &lt;transfer function&gt; </dt>
<dd>Deprecated and will be removed. Use <b>--assign-tf</b> instead. </dd>
<dt>--assign-primaries &lt;primaries&gt; </dt>
<dd>Force the created texture to have the specified color primaries, ignoring the color primaries of the input file(s). Possible options match the khr_df_primaries_e enumerators without the KHR_DF_PRIMARIES_ prefix. The KHR_DF_PRIMARIES_ prefix is ignored if present. Case insensitive. The options are: none | bt709 | srgb | bt601_ebu | bt601_smpte | bt2020 | ciexyz | aces | acescc | ntsc1953 | pal525 | displayp3 | adobergb. <dl class="section note"><dt>Note</dt><dd><code>bt601-ebu</code> and <code>bt601-smpte</code>, supported in previous releases, have been replaced with names consistent with khr_df_primaries_e. </dd></dl>
</dd>
<dt>--assign-texcoord-origin &lt;corner&gt; </dt>
<dd>Force the created texture to indicate that the texture coordinate origin s=0, t=0 is at the specified <em>corner</em> of the logical image. Case insensitive. Possible options are top-left | bottom-left. -front | -back can be appended and one of these is required when <b>--depth</b> is specified. Must be top-left if <b>--cubemap</b> is specified. Absent <b>—convert-texcoord-origin</b>, the effect of this option is to cause <em>KTXorientation</em> metadata indicating the specified origin to be written to the output file. Example values are "rd" (top-left) and "ru" (bottom-left) or, when <b>--depth</b> is specified, "rdi" (top-left-front) and "rui" (bottom-left-front). </dd>
<dt>--convert-tf &lt;transfer function&gt; </dt>
<dd>Convert the input image(s) to the specified transfer function, if different from the transfer function of the input file(s). If both this and <b>--assign-tf</b> are specified, conversion will be performed from the assigned transfer function to the transfer function specified by this option, if different. Cannot be used with <b>--raw</b>. Case insensitive. The options are: linear | srgb. The following srgb aliases are also supported: srgb_eotf | scrgb | scrgb_eotf. See <a class="el" href="#ktx_create_tf_handling" title="TRANSFER FUNCTION HANDLING">TRANSFER FUNCTION HANDLING</a> below for more information. </dd>
<dt>--convert-oetf &lt;transfer function&gt; </dt>
<dd>Deprecated and will be removed. Use <b>--convert-tf</b> instead. </dd>
<dt>--convert-primaries &lt;primaries&gt; </dt>
<dd>Convert the input image(s) to the specified color primaries, if different from the color primaries of the input file(s) or the one specified by <b>--assign-primaries</b>. If both this and <b>--assign-primaries</b> are specified, conversion will be performed from the assigned primaries to the primaries specified by this option, if different. This option is not allowed to be specified when <b>--assign-primaries</b> is set to 'none'. Cannot be used with <b>--raw</b>. Possible options match the khr_df_primaries_e enumerators without the KHR_DF_PRIMARIES_ prefix. The KHR_DF_PRIMARIES_ prefix is ignored if present. Case insensitive. The options are: bt709 | srgb | bt601_ebu | bt601_smpte | bt2020 | ciexyz | aces | acescc | ntsc1953 | pal525 | displayp3 | adobergb <dl class="section note"><dt>Note</dt><dd><code>bt601-ebu</code> and <code>bt601-smpte</code>, supported in previous releases, have been replaced with names consistent with khr_df_primaries_e. </dd></dl>
</dd>
<dt>--convert-texcoord-origin &lt;corner&gt; </dt>
<dd>Convert the input image(s) so the texture coordinate origin s=0, t=0, is at the specified <em>corner</em> of the logical image. If both this and <b>--assign-texcoord-origin</b> are specified, conversion will be performed from the assigned origin to the origin specified by this option, if different. The default for images in KTX files is top-left which corresponds to the origin in most image file formats. Cannot be used with <b>--raw</b>. Case insensitive. Possible options are: top-left | bottom-left. -front | -back can be appended and one of these is required when <b>--depth</b> is specified. Must be top-left if <b>--cubemap</b> is specified.<br />
<br />
Input images whose origin does not match <em>corner</em> will be flipped vertically. <em>KTXorientation</em> metadata indicating the the specified origin is written to the output file. Example values are "rd" (top-left) and "ru" (bottom-left) or, when <b>--depth</b> is specified, "rdi" (top-left-front) and "rui" (bottom-left-back). Generates an error if the input image origin is unknown as is the case with raw image data. Use <b>--assign-texcoord-origin</b> to specify the orientation. <dl class="section note"><dt>Note</dt><dd>ktx create cannot rotate or flip incoming images, except for a y-flip, so use an an image processing tool to reorient images whose first data stream pixel is not at the logical top-left or bottom-left of the image before using as input here. Such images may be indicated by Exif-style orientation metadata in the file. </dd></dl>
</dd>
<dt>--fail-on-color-conversions </dt>
<dd>Generates an error if any input images would need to be color converted. </dd>
<dt>--warn-on-color-conversions </dt>
<dd>Generates a warning if any input images are color converted. Adds warnings for explicitly requested and visually lossless implicit conversions to that generated for visually lossy conversions. </dd>
<dt>--no-warn-on-color-conversions </dt>
<dd>Disable all warnings about color conversions including that for visually lossy conversions. Overrides <b>--warn-on-color-conversions</b> should both be specified. </dd>
<dt>--fail-on-origin-changes </dt>
<dd>Generates an error if any of the input images would need to have their origin changed. </dd>
<dt>--warn-on-origin-changes </dt>
<dd>Generates a warning if any of the input images have their origin changed.. </dd>
</dl>
<dl>
<dt>--zstd &lt;level&gt; </dt>
<dd>Supercompress the data with Zstandard. Cannot be used with ETC1S / BasisLZ format. Level range is [1,22]. Lower levels give faster but worse compression. Values above 20 should be used with caution as they require more memory. </dd>
<dt>--zlib &lt;level&gt; </dt>
<dd>Supercompress the data with ZLIB. Cannot be used with ETC1S / BasisLZ format. Level range is [1,9]. Lower levels give faster but worse compression. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h2 class="doxsection"><a class="anchor" id="ktx_create_options_encoding"></a>
Specific and Common Encoding Options</h2>
<p>The following are available. Specific options become valid only if their encoder has been selected. Common encoder options become valid when an encoder they apply to has been selected. Otherwise they are ignored. </p><dl>
<dt>ASTC: </dt>
<dd><p class="startdd"></p>
<dl>
<dt>--astc-quality &lt;level&gt; </dt>
<dd>The quality level configures the quality-performance tradeoff for the compressor; more complete searches of the search space improve image quality at the expense of compression time. Default is 'medium'. The quality level can be set between fastest (0) and exhaustive (100) via the following fixed quality presets: <table class="doxtable">
<tr>
<th>Level </th><th>Quality </th></tr>
<tr>
<td>fastest </td><td>(equivalent to quality = 0) </td></tr>
<tr>
<td>fast </td><td>(equivalent to quality = 10) </td></tr>
<tr>
<td>medium </td><td>(equivalent to quality = 60) </td></tr>
<tr>
<td>thorough </td><td>(equivalent to quality = 98) </td></tr>
<tr>
<td>exhaustive </td><td>(equivalent to quality = 100) </td></tr>
</table>
</dd>
<dt>--astc-perceptual </dt>
<dd>The codec should optimize for perceptual error, instead of direct RMS error. This aims to improve perceived image quality, but typically lowers the measured PSNR score. Perceptual methods are currently only available for normal maps and RGB color data. </dd>
</dl>
</dd>
</dl>
<dl>
<dt>basis-lz: </dt>
<dd><dl>
<dt>--clevel &lt;level&gt; </dt>
<dd>ETC1S / BasisLZ compression level, an encoding speed vs. quality tradeoff. Range is [0,6], default is 1. Higher values are slower but give higher quality. Use <b>--qlevel</b> first. </dd>
<dt>--qlevel &lt;level&gt; </dt>
<dd><p class="startdd">ETC1S / BasisLZ quality level. Range is [1,255]. Lower gives better compression/lower quality/faster. Higher gives less compression/higher quality/slower. <b>--qlevel</b> automatically determines values for <b>--max-endpoints</b>, <b>--max-selectors</b>, <b>--endpoint-rdo-threshold</b> and <b>--selector-rdo-threshold</b> for the target quality level. Setting these options overrides the values determined by -qlevel which defaults to 128 if neither it nor <b>--max-endpoints</b> and <b>--max-selectors</b> have been set.</p>
<p class="interdd">Note that both of <b>--max-endpoints</b> and <b>--max-selectors</b> must be set for them to have any effect. If all three options are set, a warning will be issued that <b>--qlevel</b> will be ignored.</p>
<p class="enddd">Note also that <b>--qlevel</b> will only determine values for <b>--endpoint-rdo-threshold</b> and <b>--selector-rdo-threshold</b> when its value exceeds 128, otherwise their defaults will be used. </p>
</dd>
<dt>--max-endpoints &lt;arg&gt; </dt>
<dd>Manually set the maximum number of color endpoint clusters. Range is [1,16128]. Default is 0, unset. </dd>
<dt>--endpoint-rdo-threshold &lt;arg&gt; </dt>
<dd>Set endpoint RDO quality threshold. The default is 1.25. Lower is higher quality but less quality per output bit (try [1.0,3.0]). This will override the value chosen by <b>--qlevel</b>. </dd>
<dt>--max-selectors &lt;arg&gt; </dt>
<dd>Manually set the maximum number of color selector clusters from [1,16128]. Default is 0, unset. </dd>
<dt>--selector-rdo-threshold &lt;arg&gt; </dt>
<dd>Set selector RDO quality threshold. The default is 1.25. Lower is higher quality but less quality per output bit (try [1.0,3.0]). This will override the value chosen by <b>--qlevel</b>. </dd>
<dt>--no-endpoint-rdo </dt>
<dd>Disable endpoint rate distortion optimizations. Slightly faster, less noisy output, but lower quality per output bit. Default is to do endpoint RDO. </dd>
<dt>--no-selector-rdo </dt>
<dd>Disable selector rate distortion optimizations. Slightly faster, less noisy output, but lower quality per output bit. Default is to do selector RDO. </dd>
</dl>
<p class="enddd"></p>
</dd>
<dt>uastc: </dt>
<dd><p class="startdd"></p>
<dl>
<dt>--uastc-quality &lt;level&gt; </dt>
<dd><p class="startdd">This optional parameter selects a speed vs quality tradeoff as shown in the following table:</p>
<table class="doxtable">
<tr>
<th>Level</th><th>Speed</th><th>Quality</th></tr>
<tr>
<td>0 </td><td>Fastest </td><td>43.45dB</td></tr>
<tr>
<td>1 </td><td>Faster </td><td>46.49dB</td></tr>
<tr>
<td>2 </td><td>Default </td><td>47.47dB</td></tr>
<tr>
<td>3 </td><td>Slower </td><td>48.01dB</td></tr>
<tr>
<td>4 </td><td>Very slow </td><td>48.24dB</td></tr>
</table>
<p class="enddd">You are strongly encouraged to also specify <b>--zstd</b> to losslessly compress the UASTC data. This and any LZ-style compression can be made more effective by conditioning the UASTC texture data using the Rate Distortion Optimization (RDO) post-process stage. When uastc encoding is set the following options become available for controlling RDO: </p>
</dd>
<dt>--uastc-rdo </dt>
<dd>Enable UASTC RDO post-processing. </dd>
<dt>--uastc-rdo-l &lt;lambda&gt; </dt>
<dd><p class="startdd">Set UASTC RDO quality scalar (lambda) to <em>lambda</em>. Lower values yield higher quality/larger LZ compressed files, higher values yield lower quality/smaller LZ compressed files. A good range to try is [.25,10]. For normal maps a good range is [.25,.75]. The full range is [.001,10.0]. Default is 1.0.</p>
<p class="enddd">Note that previous versions used the <b>--uastc-rdo-q</b> option which was removed because the RDO algorithm changed. </p>
</dd>
<dt>--uastc-rdo-d &lt;dictsize&gt; </dt>
<dd>Set UASTC RDO dictionary size in bytes. Default is 4096. Lower values=faster, but give less compression. Range is [64,65536]. </dd>
<dt>--uastc-rdo-b &lt;scale&gt; </dt>
<dd>Set UASTC RDO max smooth block error scale. Range is [1.0,300.0]. Default is 10.0, 1.0 is disabled. Larger values suppress more artifacts (and allocate more bits) on smooth blocks. </dd>
<dt>--uastc-rdo-s &lt;deviation&gt; </dt>
<dd>Set UASTC RDO max smooth block standard deviation. Range is [.01,65536.0]. Default is 18.0. Larger values expand the range of blocks considered smooth. </dd>
<dt>--uastc-rdo-f </dt>
<dd>Do not favor simpler UASTC modes in RDO mode. </dd>
<dt>--uastc-rdo-m </dt>
<dd>Disable RDO multithreading (slightly higher compression, deterministic). </dd>
</dl>
</dd>
</dl>
<dl>
<dt>common: </dt>
<dd><dl>
<dt>--normal-mode </dt>
<dd><p class="startdd">Only valid for linear textures with two or more components. If the input texture has three or four linear components it is assumed to be a three component linear normal map storing unit length normals as (R=X, G=Y, B=Z). A fourth component will be ignored. The map will be converted to a two component X+Y normal map stored as (RGB=X, A=Y) prior to encoding. If unsure that your normals are unit length, use <b>--normalize</b>. If the input has 2 linear components it is assumed to be an X+Y map of unit normals.</p>
<p class="enddd">The Z component can be recovered programmatically in shader code by using the equations: </p><pre>
nml.xy = texture(...).ga; // Load in [0,1]
nml.xy = nml.xy * 2.0 - 1.0; // Unpack to [-1,1]
nml.z = sqrt(1 - dot(nml.xy, nml.xy)); // Compute Z
</pre><p> For ETC1S / BasisLZ encoding, <b>'--encode</b> basis-lz', RDO is disabled (no selector RDO, no endpoint RDO) to provide better quality. </p>
</dd>
<dt>--threads &lt;count&gt; </dt>
<dd>Explicitly set the number of threads to use during compression. By default, ETC1S / BasisLZ will use the number of threads reported by <code>thread::hardware_concurrency</code> or 1 if value returned is 0. </dd>
<dt>--no-sse </dt>
<dd>Forbid use of the SSE instruction set. Ignored if CPU does not support SSE. SSE can only be disabled for the basis-lz and uastc encoders. Ignored for other encoders.. </dd>
</dl>
</dd>
</dl>
<dl>
<dt></dt>
<dd><dl>
<dt>--compare-ssim </dt>
<dd>Calculate encoding structural similarity index measure (SSIM) and print it to stdout. Requires Basis-LZ, UASTC or ASTC encoding. </dd>
<dt>--compare-psnr </dt>
<dd>Calculate encoding peak signal-to-noise ratio (PSNR) and print it to stdout. Requires Basis-LZ, UASTC or ASTC encoding. </dd>
</dl>
</dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx_create_tf_handling"></a>
TRANSFER FUNCTION HANDLING</h1>
<p>The diagram below shows all assignments and conversions that can take place.</p>
<pre class="fragment">┌──────────┐ ┌─────────┐
│ ├──────────────────1─────────────────►│ │
│ │ ┌───────────┐ │ │
│ Input │ │ │ │ │
│ Transfer │ │ --assign- ├──────────2──────────►│Output │
│ function │ │ tf │ ┌────────────┐ │Transfer │
│ from │ │ ├─3─►│ │ │Function │
│ file │ │ │ │ --convert- │ │ │
│ metadata │ └───────────┘ │ tf ├3,4►│ │
│ │ │ │ │ │
│ ├────────4─────────►│ │ │ │
└──────────┘ └────────────┘ └─────────┘
</pre><h4>Processing Paths</h4>
<ol>
<li>
Pass through. No options specified. </li>
<li>
<b>--assign-tf</b> specified. </li>
<li>
<b>--assign-tf</b> and <b>--convert-tf</b> specified. </li>
<li>
<b>--convert-tf</b> specified. </li>
</ol>
<h2 class="doxsection"><a class="anchor" id="ktx_create_tf_handling_details"></a>
Details</h2>
<p>Transfer function handling proceeds as follows: </p><ul>
<li>
If <b>--format</b> specifies one of the <code>*_SRGB{</code>,_*} formats and Output Transfer Function is not sRGB (a.k.a scRGB) an error is generated. </li>
<li>
If <b>--format</b> does not specify one of the <code>*_SRGB{</code>,_*} formats, an sRGB variant exists and Output Transfer Function is sRGB (a.k.a scRGB), an error is generated. </li>
<li>
Otherwise, the transfer function of the output KTX file is set to Output Transfer Function. </li>
<li>
If neither <b>--assign-tf</b> nor <b>--convert-tf</b> is specified: <ul>
<li>
If the Input Transfer Function is not sRGB (a.k.a scRGB) for <code>*_SRGB{</code>,_*} formats an implicit conversion to sRGB is done, equivalent to <b>--convert-tf</b> srgb. </li>
<li>
If the Input Transfer Function is not linear for formats that are not one of the <code>*_SRGB{</code>,_*} formats, an implicit conversion to linear is done equivalent to <b>--convert-tf</b> linear. </li>
</ul>
</li>
<li>
Supported inputs for implicit or explicit conversion are linear, sRGB, ITU (a.k.a BT601, BT.709, BT.2020 and SMPTE170M) and PQ EOTF. An error is generated if an unsupported conversion is required. </li>
<li>
Supported outputs for implicit or explicit conversion are linear and sRGB, An error is generated if an unsupported conversion is required. </li>
<li>
Output Transfer Function for a format that is not one of the <code>*_SRGB{</code>,_*} formats can be set to a non-linear transfer function via <b>--assign-tf</b>. </li>
<li>
A warning is generated if a visually lossy color-conversion is performed. sRGB to linear is considered visually lossy because there is a high chance it will introduce artifacts visible to the human eye such as banding. The warning can be suppressed with <b>--no-warn-on-color-conversions</b>. A warning or an error on any color conversion can be requested with <b>--warn-on-color-conversions</b> or <b>--fail-on-color-conversions</b> . </li>
</ul>
<dl class="section note"><dt>Note</dt><dd>When <b>--format</b> does not specify one of the <em><em>SRGB{,</em></em>} formats and Output Transfer Function is not linear: <ul>
<li>the KTX file may be much less portable due to limited hardware support of such inputs. </li>
<li>avoid using <b>--generate-mipmap</b> as the filters can only decode sRGB. </li>
<li>avoid encoding to ASTC, BasisLz/ETC1S or UASTC. The encoders' quality metrics are designed for linear and sRGB.</li>
</ul>
</dd></dl>
<h2 class="doxsection"><a class="anchor" id="ktx_create_tf_handling_changes"></a>
Changes since last Release</h2>
<ol>
<li>
<b>--assign-oetf</b> and <b>--convert-oetf</b> are deprecated and will be removed. Use <b>--assign-tf</b> and <b>--convert-tf</b> instead. </li>
<li>
The parameter value for <b>--assign-tf</b> can now be any of the transfer functions known to the Khronos Data Format Specification. </li>
<li>
A warning is now generated if a visually lossy color conversion will be performed. The warning can be suppressed with <b>--no-warn-on-color-conversions</b>. </li>
</ol>
<h1 class="doxsection"><a class="anchor" id="ktx_create_exitstatus"></a>
EXIT STATUS</h1>
<ul>
<li>0 - Success</li>
<li>1 - Command line error</li>
<li>2 - IO failure</li>
<li>3 - Invalid input file</li>
<li>4 - Runtime or library error</li>
<li>5 - Not supported state or operation</li>
<li>6 - Requested feature is not yet implemented </li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_create_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.3</dt><dd><ul>
<li>Initial version</li>
</ul>
</dd></dl>
<dl class="section user"><dt>Version 4.4</dt><dd><ul>
<li>Reorganize encoding options.</li>
<li>Improve explanation of use of <b>--format</b> with <b>--encode</b>.</li>
<li>Improve explanation of ASTC encoding.</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_create_author"></a>
AUTHOR</h1>
<ul>
<li>Mátyás Császár [Vader], RasterGrid www.rastergrid.com</li>
<li>Daniel Rákos, RasterGrid www.rastergrid.com</li>
<li>Mark Callow </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,164 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx deflate</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx_deflate.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx deflate </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Deflate (supercompress) a KTX2 file.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_deflate_synopsis"></a>
SYNOPSIS</h1>
<p>ktx deflate [option...] <em>input-file</em> <em>output-file</em> </p>
<h1 class="doxsection"><a class="anchor" id="ktx_deflate_description"></a>
DESCRIPTION</h1>
<p><b>ktx</b> <b>deflate</b> deflates (supercompresses) the KTX file specified as the <em>input-file</em> and saves it as the <em>output-file</em>. If the <em>input-file</em> is '-' the file will be read from the stdin. If the <em>output-path</em> is '-' the output file will be written to the stdout. If the input file is already supercompressed it will be inflated then supercompressed again using the options specified here and a warning will be issued. If the input file is invalid the first encountered validation error is displayed to the stderr and the command exits with the relevant non-zero status code.</p>
<p><b>ktx</b> <b>deflate</b> cannot be applied to KTX files that have been supercompressed with BasisLZ.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_deflate_options"></a>
OPTIONS</h1>
<p>The following options are available: </p><dl>
<dt>--zstd &lt;level&gt; </dt>
<dd>Supercompress the data with Zstandard. Cannot be used with ETC1S / BasisLZ format. Level range is [1,22]. Lower levels give faster but worse compression. Values above 20 should be used with caution as they require more memory. </dd>
<dt>--zlib &lt;level&gt; </dt>
<dd>Supercompress the data with ZLIB. Cannot be used with ETC1S / BasisLZ format. Level range is [1,9]. Lower levels give faster but worse compression. </dd>
</dl>
<dl>
<dt>-q, &ndash;quiet </dt>
<dd>Silence warning about already supercompressed input fiile. </dd>
<dt>-e, &ndash;warnings-as-errors </dt>
<dd>Treat warnings as errors. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx_deflate_exitstatus"></a>
EXIT STATUS</h1>
<ul>
<li>0 - Success</li>
<li>1 - Command line error</li>
<li>2 - IO failure</li>
<li>3 - Invalid input file</li>
<li>4 - Runtime or library error</li>
<li>5 - Not supported state or operation</li>
<li>6 - Requested feature is not yet implemented </li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_deflate_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_deflate_author"></a>
AUTHOR</h1>
<ul>
<li>Mark Callow [@MarkCallow] </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,300 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx encode</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx_encode.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx encode </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Encode a KTX2 file.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_encode_synopsis"></a>
SYNOPSIS</h1>
<p>ktx encode [option...] <em>input-file</em> <em>output-file</em> </p>
<h1 class="doxsection"><a class="anchor" id="ktx_encode_description"></a>
DESCRIPTION</h1>
<p><b>ktx</b> <b>encode</b> can encode the KTX file specified as the <em>input-file</em> argument to a universal format or one of the ASTC formats, optionally supercompress the result, and save it as the <em>output-file</em>. If the <em>input-file</em> is '-' the file will be read from the stdin. If the <em>output-path</em> is '-' the output file will be written to the stdout.</p>
<p>For universal and ASTC LDR formats, the input file must be R8, R8G8, R8G8B8 or R8G8B8A8 (or their sRGB variants).</p>
<p>If the input file is invalid the first encountered validation error is displayed to the stderr and the command exits with the relevant non-zero status code.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_encode_options"></a>
OPTIONS</h1>
<h2 class="doxsection"><a class="anchor" id="ktx_encode_options_general"></a>
General Options</h2>
<p>The following options are available: </p><dl>
<dt>--codec basis-lz | uastc </dt>
<dd><p class="startdd">Target codec followed by the codec specific options. With each choice the specific and common encoder options listed <a class="el" href="#ktx_encode_options_encoding" title="Specific and Common Encoding Options">below</a> become valid, otherwise they are ignored. Case-insensitive.</p>
<dl>
<dt>basis-lz: </dt>
<dd>Supercompress the image data with transcodable ETC1S / BasisLZ. RED images will become RGB with RED in each component (RRR). RG images will have R in the RGB part and G in the alpha part of the compressed texture (RRRG). When set, the <em>basis-lz</em> options become valid. </dd>
<dt>uastc: </dt>
<dd>Create a texture in high-quality transcodable UASTC format. When set the <em>uastc</em> options become valid. </dd>
</dl>
<p class="enddd"></p>
</dd>
<dt>--format </dt>
<dd>KTX format enum that specifies the target ASTC format. Non-ASTC formats are invalid. When specified the ASTC-specific and common encoder options listed <a class="el" href="#ktx_encode_options_encoding" title="Specific and Common Encoding Options">below</a> become valid, otherwise they are ignored. </dd>
</dl>
<dl>
<dt>--zstd &lt;level&gt; </dt>
<dd>Supercompress the data with Zstandard. Cannot be used with ETC1S / BasisLZ format. Level range is [1,22]. Lower levels give faster but worse compression. Values above 20 should be used with caution as they require more memory. </dd>
<dt>--zlib &lt;level&gt; </dt>
<dd>Supercompress the data with ZLIB. Cannot be used with ETC1S / BasisLZ format. Level range is [1,9]. Lower levels give faster but worse compression. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h2 class="doxsection"><a class="anchor" id="ktx_encode_options_encoding"></a>
Specific and Common Encoding Options</h2>
<p>The following specific and common encoder options are available. Specific options become valid only if their encoder has been selected. Common encoder options become valid when an encoder they apply to has been selected. Otherwise they are ignored. </p><dl>
<dt>ASTC: </dt>
<dd><p class="startdd"></p>
<dl>
<dt>--astc-quality &lt;level&gt; </dt>
<dd>The quality level configures the quality-performance tradeoff for the compressor; more complete searches of the search space improve image quality at the expense of compression time. Default is 'medium'. The quality level can be set between fastest (0) and exhaustive (100) via the following fixed quality presets: <table class="doxtable">
<tr>
<th>Level </th><th>Quality </th></tr>
<tr>
<td>fastest </td><td>(equivalent to quality = 0) </td></tr>
<tr>
<td>fast </td><td>(equivalent to quality = 10) </td></tr>
<tr>
<td>medium </td><td>(equivalent to quality = 60) </td></tr>
<tr>
<td>thorough </td><td>(equivalent to quality = 98) </td></tr>
<tr>
<td>exhaustive </td><td>(equivalent to quality = 100) </td></tr>
</table>
</dd>
<dt>--astc-perceptual </dt>
<dd>The codec should optimize for perceptual error, instead of direct RMS error. This aims to improve perceived image quality, but typically lowers the measured PSNR score. Perceptual methods are currently only available for normal maps and RGB color data. </dd>
</dl>
</dd>
</dl>
<dl>
<dt>basis-lz: </dt>
<dd><dl>
<dt>--clevel &lt;level&gt; </dt>
<dd>ETC1S / BasisLZ compression level, an encoding speed vs. quality tradeoff. Range is [0,6], default is 1. Higher values are slower but give higher quality. Use <b>--qlevel</b> first. </dd>
<dt>--qlevel &lt;level&gt; </dt>
<dd><p class="startdd">ETC1S / BasisLZ quality level. Range is [1,255]. Lower gives better compression/lower quality/faster. Higher gives less compression/higher quality/slower. <b>--qlevel</b> automatically determines values for <b>--max-endpoints</b>, <b>--max-selectors</b>, <b>--endpoint-rdo-threshold</b> and <b>--selector-rdo-threshold</b> for the target quality level. Setting these options overrides the values determined by -qlevel which defaults to 128 if neither it nor <b>--max-endpoints</b> and <b>--max-selectors</b> have been set.</p>
<p class="interdd">Note that both of <b>--max-endpoints</b> and <b>--max-selectors</b> must be set for them to have any effect. If all three options are set, a warning will be issued that <b>--qlevel</b> will be ignored.</p>
<p class="enddd">Note also that <b>--qlevel</b> will only determine values for <b>--endpoint-rdo-threshold</b> and <b>--selector-rdo-threshold</b> when its value exceeds 128, otherwise their defaults will be used. </p>
</dd>
<dt>--max-endpoints &lt;arg&gt; </dt>
<dd>Manually set the maximum number of color endpoint clusters. Range is [1,16128]. Default is 0, unset. </dd>
<dt>--endpoint-rdo-threshold &lt;arg&gt; </dt>
<dd>Set endpoint RDO quality threshold. The default is 1.25. Lower is higher quality but less quality per output bit (try [1.0,3.0]). This will override the value chosen by <b>--qlevel</b>. </dd>
<dt>--max-selectors &lt;arg&gt; </dt>
<dd>Manually set the maximum number of color selector clusters from [1,16128]. Default is 0, unset. </dd>
<dt>--selector-rdo-threshold &lt;arg&gt; </dt>
<dd>Set selector RDO quality threshold. The default is 1.25. Lower is higher quality but less quality per output bit (try [1.0,3.0]). This will override the value chosen by <b>--qlevel</b>. </dd>
<dt>--no-endpoint-rdo </dt>
<dd>Disable endpoint rate distortion optimizations. Slightly faster, less noisy output, but lower quality per output bit. Default is to do endpoint RDO. </dd>
<dt>--no-selector-rdo </dt>
<dd>Disable selector rate distortion optimizations. Slightly faster, less noisy output, but lower quality per output bit. Default is to do selector RDO. </dd>
</dl>
<p class="enddd"></p>
</dd>
<dt>uastc: </dt>
<dd><p class="startdd"></p>
<dl>
<dt>--uastc-quality &lt;level&gt; </dt>
<dd><p class="startdd">This optional parameter selects a speed vs quality tradeoff as shown in the following table:</p>
<table class="doxtable">
<tr>
<th>Level</th><th>Speed</th><th>Quality</th></tr>
<tr>
<td>0 </td><td>Fastest </td><td>43.45dB</td></tr>
<tr>
<td>1 </td><td>Faster </td><td>46.49dB</td></tr>
<tr>
<td>2 </td><td>Default </td><td>47.47dB</td></tr>
<tr>
<td>3 </td><td>Slower </td><td>48.01dB</td></tr>
<tr>
<td>4 </td><td>Very slow </td><td>48.24dB</td></tr>
</table>
<p class="enddd">You are strongly encouraged to also specify <b>--zstd</b> to losslessly compress the UASTC data. This and any LZ-style compression can be made more effective by conditioning the UASTC texture data using the Rate Distortion Optimization (RDO) post-process stage. When uastc encoding is set the following options become available for controlling RDO: </p>
</dd>
<dt>--uastc-rdo </dt>
<dd>Enable UASTC RDO post-processing. </dd>
<dt>--uastc-rdo-l &lt;lambda&gt; </dt>
<dd><p class="startdd">Set UASTC RDO quality scalar (lambda) to <em>lambda</em>. Lower values yield higher quality/larger LZ compressed files, higher values yield lower quality/smaller LZ compressed files. A good range to try is [.25,10]. For normal maps a good range is [.25,.75]. The full range is [.001,10.0]. Default is 1.0.</p>
<p class="enddd">Note that previous versions used the <b>--uastc-rdo-q</b> option which was removed because the RDO algorithm changed. </p>
</dd>
<dt>--uastc-rdo-d &lt;dictsize&gt; </dt>
<dd>Set UASTC RDO dictionary size in bytes. Default is 4096. Lower values=faster, but give less compression. Range is [64,65536]. </dd>
<dt>--uastc-rdo-b &lt;scale&gt; </dt>
<dd>Set UASTC RDO max smooth block error scale. Range is [1.0,300.0]. Default is 10.0, 1.0 is disabled. Larger values suppress more artifacts (and allocate more bits) on smooth blocks. </dd>
<dt>--uastc-rdo-s &lt;deviation&gt; </dt>
<dd>Set UASTC RDO max smooth block standard deviation. Range is [.01,65536.0]. Default is 18.0. Larger values expand the range of blocks considered smooth. </dd>
<dt>--uastc-rdo-f </dt>
<dd>Do not favor simpler UASTC modes in RDO mode. </dd>
<dt>--uastc-rdo-m </dt>
<dd>Disable RDO multithreading (slightly higher compression, deterministic). </dd>
</dl>
</dd>
</dl>
<dl>
<dt>common: </dt>
<dd><dl>
<dt>--normal-mode </dt>
<dd><p class="startdd">Only valid for linear textures with two or more components. If the input texture has three or four linear components it is assumed to be a three component linear normal map storing unit length normals as (R=X, G=Y, B=Z). A fourth component will be ignored. The map will be converted to a two component X+Y normal map stored as (RGB=X, A=Y) prior to encoding. If unsure that your normals are unit length, use <b>--normalize</b>. If the input has 2 linear components it is assumed to be an X+Y map of unit normals.</p>
<p class="enddd">The Z component can be recovered programmatically in shader code by using the equations: </p><pre>
nml.xy = texture(...).ga; // Load in [0,1]
nml.xy = nml.xy * 2.0 - 1.0; // Unpack to [-1,1]
nml.z = sqrt(1 - dot(nml.xy, nml.xy)); // Compute Z
</pre><p> For ETC1S / BasisLZ encoding, <b>'--encode</b> basis-lz', RDO is disabled (no selector RDO, no endpoint RDO) to provide better quality. </p>
</dd>
<dt>--threads &lt;count&gt; </dt>
<dd>Explicitly set the number of threads to use during compression. By default, ETC1S / BasisLZ will use the number of threads reported by <code>thread::hardware_concurrency</code> or 1 if value returned is 0. </dd>
<dt>--no-sse </dt>
<dd>Forbid use of the SSE instruction set. Ignored if CPU does not support SSE. SSE can only be disabled for the basis-lz and uastc encoders. Ignored for other encoders.. </dd>
</dl>
</dd>
</dl>
<dl>
<dt></dt>
<dd><dl>
<dt>--compare-ssim </dt>
<dd>Calculate encoding structural similarity index measure (SSIM) and print it to stdout. Requires Basis-LZ, UASTC or ASTC encoding. </dd>
<dt>--compare-psnr </dt>
<dd>Calculate encoding peak signal-to-noise ratio (PSNR) and print it to stdout. Requires Basis-LZ, UASTC or ASTC encoding. </dd>
</dl>
</dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx_encode_exitstatus"></a>
EXIT STATUS</h1>
<ul>
<li>0 - Success</li>
<li>1 - Command line error</li>
<li>2 - IO failure</li>
<li>3 - Invalid input file</li>
<li>4 - Runtime or library error</li>
<li>5 - Not supported state or operation</li>
<li>6 - Requested feature is not yet implemented </li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_encode_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version.</li>
</ul>
</dd></dl>
<dl class="section user"><dt>Version 4.4</dt><dd><ul>
<li>Reorganize encoding options.</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_encode_author"></a>
AUTHOR</h1>
<ul>
<li>Mátyás Császár [Vader], RasterGrid www.rastergrid.com</li>
<li>Daniel Rákos, RasterGrid www.rastergrid.com </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,188 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx extract</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx_extract.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx extract </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Extract selected images from a KTX2 file.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_extract_synopsis"></a>
SYNOPSIS</h1>
<p>ktx extract [option...] <em>input-file</em> <em>output-path</em> </p>
<h1 class="doxsection"><a class="anchor" id="ktx_extract_description"></a>
DESCRIPTION</h1>
<p><b>ktx</b> <b>extract</b> can extract one or multiple images from the KTX2 file specified as the <em>input-file</em> argument and, based on the format, save them as Raw, EXR or PNG image files to the <em>output-path</em>. If the <em>input-file</em> is '-' the file will be read from the stdin. If the <em>output-path</em> is '-' the output file will be written to the stdout. If the input file is invalid the first encountered validation error is displayed to the stderr and the command exits with the relevant non-zero status code.</p>
<p>The <em>output-path</em> is interpreted as output filepath for single and output directory for multi-image extracts. When extracting multiple images with either '&ndash;all' or any of the 'all' args the following naming is used for each output file: </p><pre>output-path/output_level{}_face{}_layer{}_depth{}.extension</pre><ul>
<li>Where the <em>_level{}</em> part is only present if the source texture has more than 1 level</li>
<li>Where the <em>_face{}</em> part is only present if the source texture is cubemap or cubemap array (Cubemap)</li>
<li>Where the <em>_layer{}</em> part is only present if the source texture is an array texture (Array)</li>
<li>Where the <em>_depth{}</em> part is only present if the source texture baseDepth is more than 1 (3D)</li>
<li>Where the <em>{}</em> is replaced with the numeric index of the given component starting from 0</li>
<li>Where the <em>extension</em> part is "raw", "png" or "exr" based on the export format<br />
Note: The inclusion of the optional parts are determined by the source texture regardless of which images are requested.</li>
</ul>
<p>For non-raw exports the output image format is chosen to be the smallest related lossless format:</p><ul>
<li>_UNORM formats exported as PNG with RGB/RGBA 8/16 bit</li>
<li>_SINT/_UINT formats exported as EXR with R/RG/RGB/RGBA Half/Float/UInt</li>
<li>_SFLOAT/_UFLOAT formats exported as EXR with R/RG/RGB/RGBA Half/Float/UInt</li>
<li>D16_UNORM exported as PNG with luminance (Gray) 16 bit</li>
<li>Other Depth/Stencil formats exported as EXR with D/S/DS Half/Float</li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_extract_options"></a>
OPTIONS</h1>
<p>The following options are available: </p><dl>
<dt>--transcode &lt;target&gt; </dt>
<dd>Transcode the texture to the target format before executing the extract. Requires the input file to be transcodable (it must be either BasisLZ supercompressed or has UASTC color model in the DFD). This option matches the functionality of the <a class="el" href="ktx_transcode.html" title="ktx transcode">ktx transcode</a> command. If the target option is not set the r8, rg8, rgb8 or rgba8 target will be selected based on the number of channels in the input texture. Block compressed transcode targets can only be saved in raw format. Case-insensitive. Possible options are: etc-rgb | etc-rgba | eac-r11 | eac-rg11 | bc1 | bc3 | bc4 | bc5 | bc7 | astc | r8 | rg8 | rgb8 | rgba8. etc-rgb is ETC1; etc-rgba, eac-r11 and eac-rg11 are ETC2. </dd>
</dl>
<dl>
<dt>--uri &lt;uri&gt; </dt>
<dd>KTX Fragment URI. <a href="https://registry.khronos.org/KTX/specs/2.0/ktx-frag.html">https://registry.khronos.org/KTX/specs/2.0/ktx-frag.html</a> </dd>
<dt>--level [0-9]+ | all </dt>
<dd>Level to extract. When 'all' is used every level is exported. Defaults to 0. </dd>
<dt>--layer [0-9]+ | all </dt>
<dd>Layer to extract. When 'all' is used every layer is exported. Defaults to 0. </dd>
<dt>--face [0-9]+ | all </dt>
<dd>Face to extract. When 'all' is used every face is exported. Defaults to 0. </dd>
<dt>--depth [0-9]+ | all </dt>
<dd>Depth slice to extract. When 'all' is used every depth is exported. Defaults to 0. </dd>
<dt>--all </dt>
<dd>Extract every image slice from the texture. </dd>
<dt>--raw </dt>
<dd>Extract the raw image data without any conversion. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx_extract_exitstatus"></a>
EXIT STATUS</h1>
<ul>
<li>0 - Success</li>
<li>1 - Command line error</li>
<li>2 - IO failure</li>
<li>3 - Invalid input file</li>
<li>4 - Runtime or library error</li>
<li>5 - Not supported state or operation</li>
<li>6 - Requested feature is not yet implemented </li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_extract_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_extract_author"></a>
AUTHOR</h1>
<ul>
<li>Mátyás Császár [Vader], RasterGrid www.rastergrid.com</li>
<li>Daniel Rákos, RasterGrid www.rastergrid.com </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
+173
View File
@@ -0,0 +1,173 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx help</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx_help.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx help </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Display help information about the ktx tool.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_help_synopsis"></a>
SYNOPSIS</h1>
<p>ktx help [option...] [<em>command</em>]</p>
<h1 class="doxsection"><a class="anchor" id="ktx_help_description"></a>
DESCRIPTION</h1>
<p><b>ktx</b> <b>help</b> displays the man page of a specific ktx command specified as the <em>command</em> argument. On windows systems the man pages are opened with the system default browser in html format. On systems derived from Unix the man pages are opened with the man command.</p>
<p>To support custom install locations the tool first tries to use the man files relative to the executable and falls back to the system man pages.</p>
<p><em>command</em> specifies which command's man page will be displayed. If <em>command</em> is s missing the main ktx tool man page will be displayed. Possible choices are: <br />
</p><ul>
<li><a class="el" href="ktx_compare.html" title="ktx compare">compare</a> <br />
</li>
<li><a class="el" href="ktx_create.html" title="ktx create">create</a> <br />
</li>
<li><a class="el" href="ktx_create.html" title="ktx create">deflate</a> <br />
</li>
<li><a class="el" href="ktx_encode.html" title="ktx encode">encode</a> <br />
</li>
<li><a class="el" href="ktx_extract.html" title="ktx extract">extract</a> <br />
</li>
<li><a class="el" href="ktx_info.html" title="ktx info">info</a> <br />
</li>
<li><a class="el" href="ktx_transcode.html" title="ktx transcode">transcode</a> <br />
</li>
<li><a class="el" href="ktx_validate.html" title="ktx validate">validate</a> <br />
</li>
<li><a class="el" href="ktx_help.html" title="ktx help">help</a></li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_help_options"></a>
OPTIONS</h1>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx_help_exitstatus"></a>
EXIT STATUS</h1>
<ul>
<li>0 - Success</li>
<li>1 - Command line error</li>
<li>2 - IO failure</li>
<li>3 - Invalid input file</li>
<li>4 - Runtime or library error</li>
<li>5 - Not supported state or operation</li>
<li>6 - Requested feature is not yet implemented </li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_help_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_help_author"></a>
AUTHOR</h1>
<ul>
<li>Mátyás Császár [Vader], RasterGrid www.rastergrid.com</li>
<li>Daniel Rákos, RasterGrid www.rastergrid.com </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
+162
View File
@@ -0,0 +1,162 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx info</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx_info.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx info </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Print information about a KTX2 file.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_info_synopsis"></a>
SYNOPSIS</h1>
<p>ktx info [option...] <em>input-file</em> </p>
<h1 class="doxsection"><a class="anchor" id="ktx_info_description"></a>
DESCRIPTION</h1>
<p><b>ktx</b> <b>info</b> prints information about the KTX v1 or v2 file specified as the <em>input-file</em> argument. If the <em>input-file</em> is '-' the file will be read from the stdin. The command implicitly calls <a class="el" href="ktx_validate.html" title="ktx validate">validate</a> for KTX v2 files and prints any found errors and warnings to stdout. If the specified input file is invalid the information is displayed based on best effort and may be incomplete.</p>
<p>The JSON output formats conform to the <a href="https://schema.khronos.org/ktx/info_v0.json">https://schema.khronos.org/ktx/info_v0.json</a> schema even if the input file is invalid and certain information cannot be parsed or displayed. Additionally, for JSON outputs the KTX file identifier is printed using "\u001A" instead of "\x1A" as an unescaped "\x1A" sequence inside a JSON string breaks nearly every JSON tool. Note that this does not change the value of the string only its representation. JSON output is only supported for KTX v2 files. If requested for a KTX v1 file, an error is generated.</p>
<dl class="section note"><dt>Note</dt><dd><b>ktx</b> <b>info</b> prints using UTF-8 encoding. If your console is not set for UTF-8 you will see incorrect characters in output of the file identifier on each side of the "KTX nn".</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_info_options"></a>
OPTIONS</h1>
<p>The following options are available: </p><dl>
<dt>--format text | json | mini-json </dt>
<dd>Specifies the report output format. Possible options are: <br />
<b>text</b> - Human readable text based format. <br />
<b>json</b> - Formatted JSON. <br />
<b>mini-json</b> - Minified JSON. <br />
The default format is <b>text</b>. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx_info_exitstatus"></a>
EXIT STATUS</h1>
<ul>
<li>0 - Success</li>
<li>1 - Command line error</li>
<li>2 - IO failure</li>
<li>3 - Invalid input file</li>
<li>4 - Runtime or library error</li>
<li>5 - Not supported state or operation</li>
<li>6 - Requested feature is not yet implemented </li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_info_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_info_author"></a>
AUTHOR</h1>
<ul>
<li>Mátyás Császár [Vader], RasterGrid www.rastergrid.com</li>
<li>Daniel Rákos, RasterGrid www.rastergrid.com </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@@ -0,0 +1,162 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx transcode</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx_transcode.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx transcode </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Transcode a KTX2 file.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_transcode_synopsis"></a>
SYNOPSIS</h1>
<p>ktx transcode [option...] <em>input-file</em> <em>output-file</em> </p>
<h1 class="doxsection"><a class="anchor" id="ktx_transcode_description"></a>
DESCRIPTION</h1>
<p><b>ktx</b> <b>transcode</b> can transcode the KTX file specified as the <em>input-file</em> argument, optionally supercompress the result, and save it as the <em>output-file</em>. If the <em>input-file</em> is '-' the file will be read from the stdin. If the <em>output-path</em> is '-' the output file will be written to the stdout. The input file must be transcodable (it must be either BasisLZ supercompressed or has UASTC color model in the DFD). If the input file is invalid the first encountered validation error is displayed to the stderr and the command exits with the relevant non-zero status code.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_transcode_options"></a>
OPTIONS</h1>
<p>The following options are available: </p><dl>
<dt>--target &lt;target&gt; </dt>
<dd>Target transcode format. If the target option is not set the r8, rg8, rgb8 or rgba8 target will be selected based on the number of channels in the input texture. Block compressed transcode targets can only be saved in raw format. Case-insensitive. Possible options are: etc-rgb | etc-rgba | eac-r11 | eac-rg11 | bc1 | bc3 | bc4 | bc5 | bc7 | astc | r8 | rg8 | rgb8 | rgba8. etc-rgb is ETC1; etc-rgba, eac-r11 and eac-rg11 are ETC2. </dd>
</dl>
<dl>
<dt>--zstd &lt;level&gt; </dt>
<dd>Supercompress the data with Zstandard. Cannot be used with ETC1S / BasisLZ format. Level range is [1,22]. Lower levels give faster but worse compression. Values above 20 should be used with caution as they require more memory. </dd>
<dt>--zlib &lt;level&gt; </dt>
<dd>Supercompress the data with ZLIB. Cannot be used with ETC1S / BasisLZ format. Level range is [1,9]. Lower levels give faster but worse compression. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx_transcode_exitstatus"></a>
EXIT STATUS</h1>
<ul>
<li>0 - Success</li>
<li>1 - Command line error</li>
<li>2 - IO failure</li>
<li>3 - Invalid input file</li>
<li>4 - Runtime or library error</li>
<li>5 - Not supported state or operation</li>
<li>6 - Requested feature is not yet implemented </li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_transcode_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_transcode_author"></a>
AUTHOR</h1>
<ul>
<li>Mátyás Császár [Vader], RasterGrid www.rastergrid.com</li>
<li>Daniel Rákos, RasterGrid www.rastergrid.com </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,169 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktx validate</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktx_validate.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktx validate </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Validate a KTX2 file.</p>
<h1 class="doxsection"><a class="anchor" id="ktx_validate_synopsis"></a>
SYNOPSIS</h1>
<p>ktx validate [option...] <em>input-file</em> </p>
<h1 class="doxsection"><a class="anchor" id="ktx_validate_description"></a>
DESCRIPTION</h1>
<p><b>ktx</b> <b>validate</b> validates the Khronos texture format version 2 (KTX2) file specified as the <em>input-file</em> argument. It prints any found errors and warnings to stdout. If the <em>input-file</em> is '-' the file will be read from the stdin.</p>
<p>The validation rules and checks are based on the official specification: KTX File Format Specification - <a href="https://registry.khronos.org/KTX/specs/2.0/ktxspec.v2.html">https://registry.khronos.org/KTX/specs/2.0/ktxspec.v2.html</a></p>
<p>The JSON output formats conform to the <a href="https://schema.khronos.org/ktx/validate_v0.json">https://schema.khronos.org/ktx/validate_v0.json</a> schema.</p>
<dl class="section note"><dt>Note</dt><dd><b>ktx</b> <b>validate</b> prints using UTF-8 encoding. If your console is not set for UTF-8 you will see incorrect characters in output of the file identifier on each side of the "KTX nn".</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_validate_options"></a>
OPTIONS</h1>
<p>The following options are available: </p><dl>
<dt>--format text | json | mini-json </dt>
<dd>Specifies the report output format. Possible options are: <br />
<b>text</b> - Human readable text based format. <br />
<b>json</b> - Formatted JSON. <br />
<b>mini-json</b> - Minified JSON. <br />
The default format is <b>text</b>. </dd>
</dl>
<dl>
<dt>-g, --gltf-basisu </dt>
<dd>Check compatibility with KHR_texture_basisu glTF extension. </dd>
<dt>-e, --warnings-as-errors </dt>
<dd>Treat warnings as errors. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktx_validate_exitstatus"></a>
EXIT STATUS</h1>
<ul>
<li>0 - Success</li>
<li>1 - Command line error</li>
<li>2 - IO failure</li>
<li>3 - Invalid input file</li>
<li>4 - Runtime or library error</li>
<li>5 - Not supported state or operation</li>
<li>6 - Requested feature is not yet implemented </li>
</ul>
<h1 class="doxsection"><a class="anchor" id="ktx_validate_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktx_validate_author"></a>
AUTHOR</h1>
<ul>
<li>Mátyás Császár [Vader], RasterGrid www.rastergrid.com</li>
<li>Daniel Rákos, RasterGrid www.rastergrid.com </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
+140
View File
@@ -0,0 +1,140 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktxinfo</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktxinfo.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktxinfo </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Print information about KTX or KTX2 files.</p>
<h1 class="doxsection"><a class="anchor" id="ktxinfo_synopsis"></a>
SYNOPSIS</h1>
<p>ktxinfo [options] [<em>infile</em> ...]</p>
<h1 class="doxsection"><a class="anchor" id="ktxinfo_description"></a>
DESCRIPTION</h1>
<p><b>ktxinfo</b> prints information about the KTX files provided as arguments. If no arguments are given, it prints information about a single file read from standard input.</p>
<dl class="section note"><dt>Note</dt><dd><b>ktxinfo</b> prints using UTF-8 encoding. If your console is not set for UTF-8 you will see incorrect characters in output of the file identifier on each side of the "KTX nn".</dd></dl>
<p>The following options are available: </p><dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<h1 class="doxsection"><a class="anchor" id="ktxinfo_exitstatus"></a>
EXIT STATUS</h1>
<p><b>ktxinfo</b> exits 0 on success, 1 on command line errors and 2 if one of the input files is not a KTX file.</p>
<h1 class="doxsection"><a class="anchor" id="ktxinfo_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktxinfo_author"></a>
AUTHOR</h1>
<p>Mark Callow, github.com/MarkCallow </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
+323
View File
@@ -0,0 +1,323 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: ktxsc</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ktxsc.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">ktxsc </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Supercompress the images in a KTX2 file.</p>
<h1 class="doxsection"><a class="anchor" id="ktxsc_synopsis"></a>
SYNOPSIS</h1>
<p>ktxsc [options] [<em>infile</em> ...]</p>
<h1 class="doxsection"><a class="anchor" id="ktxsc_description"></a>
DESCRIPTION</h1>
<p><b>ktxsc</b> can encode and supercompress the images in Khronos texture format version 2 files (KTX2). Uncompressed files, i.e those whose vkFormat name does not end in <code>_BLOCK</code> can be encoded to ASTC, Basis Universal (encoded to ETC1S then supercompressed with an integrated LZ step) or UASTC and optionally supercompressed with Zstandard (zstd). Any image format, except Basis Universal, can be supercompressed with zstd. For best results with UASTC, the data should be conditioned for zstd by using the <em>--uastc_rdo_q</em> and, optionally, <em>--uastc_rdo_d</em> options.</p>
<p><b>ktxsc</b> reads each named <em>infile</em> and compresses it in place. When <em>infile</em> is not specified, a single file will be read from <em>stdin</em> and the output written to <em>stdout</em>. When one or more files is specified each will be compressed in place.</p>
<p>The following options are available: </p><dl>
<dt>-o outfile, &ndash;output=outfile </dt>
<dd>Write the output to <em>outfile</em>. If <em>outfile</em> is 'stdout', output will be written to stdout. Parent directories will be created, if necessary. If there is more than 1 <em>infile</em> the command prints its usage message and exits. </dd>
<dt>-f, --force </dt>
<dd>If the destination file cannot be opened, remove it and create a new file, without prompting for confirmation regardless of its permissions. </dd>
<dt>--t2 </dt>
<dd>Output a KTX version2 file. Always true. </dd>
</dl>
<dl>
<dt>--encode &lt;astc | etc1s | uastc&gt; </dt>
<dd>Compress the image data to ASTC, transcodable ETC1S / BasisLZ or high-quality transcodable UASTC format. Implies <b>--t2</b>. With each encoding option the following encoder specific options become valid, otherwise they are ignored. <dl>
<dt>astc: </dt>
<dd>Create a texture in high-quality ASTC format. </dd>
<dt>--astc_blk_d &lt;XxY | XxYxZ&gt; </dt>
<dd>Specify which block dimension to use for compressing the textures. e.g. <b>--astc_blk_d</b> 6x5 for 2D or <b>--astc_blk_d</b> 6x6x6 for 3D. 6x6 is the default for 2D. <table class="doxtable">
<tr>
<th>Supported 2D block dimensions are:</th></tr>
<tr>
<td>4x4</td><td>8.00 bpp</td></tr>
<tr>
<td>5x4</td><td>6.40 bpp</td></tr>
<tr>
<td>5x5</td><td>5.12 bpp</td></tr>
<tr>
<td>6x5</td><td>4.27 bpp</td></tr>
<tr>
<td>6x6</td><td>3.56 bpp</td></tr>
<tr>
<td>8x5</td><td>3.20 bpp</td></tr>
<tr>
<td>8x6</td><td>2.67 bpp</td></tr>
<tr>
<td>10x5</td><td>2.56 bpp</td></tr>
<tr>
<td>10x6</td><td>2.13 bpp</td></tr>
<tr>
<td>8x8</td><td>2.00 bpp</td></tr>
<tr>
<td>10x8</td><td>1.60 bpp</td></tr>
<tr>
<td>10x10</td><td>1.28 bpp</td></tr>
<tr>
<td>12x10</td><td>1.07 bpp</td></tr>
<tr>
<td>12x12</td><td>0.89 bpp</td></tr>
<tr>
<th>Supported 3D block dimensions are:</th></tr>
<tr>
<td>3x3x3</td><td>4.74 bpp</td></tr>
<tr>
<td>4x3x3</td><td>3.56 bpp</td></tr>
<tr>
<td>4x4x3</td><td>2.67 bpp</td></tr>
<tr>
<td>4x4x4</td><td>2.00 bpp</td></tr>
<tr>
<td>5x4x4</td><td>1.60 bpp</td></tr>
<tr>
<td>5x5x4</td><td>1.28 bpp</td></tr>
<tr>
<td>5x5x5</td><td>1.02 bpp</td></tr>
<tr>
<td>6x5x5</td><td>0.85 bpp</td></tr>
<tr>
<td>6x6x5</td><td>0.71 bpp</td></tr>
<tr>
<td>6x6x6</td><td>0.59 bpp</td></tr>
</table>
</dd>
<dt>--astc_mode &lt;ldr | hdr&gt; </dt>
<dd>Specify which encoding mode to use. LDR is the default unless the input image is 16-bit in which case the default is HDR. </dd>
<dt>--astc_quality &lt;level&gt; </dt>
<dd>The quality level configures the quality-performance tradeoff for the compressor; more complete searches of the search space improve image quality at the expense of compression time. Default is 'medium'. The quality level can be set between fastest (0) and exhaustive (100) via the following fixed quality presets: <table class="doxtable">
<tr>
<th>Level </th><th>Quality </th></tr>
<tr>
<td>fastest </td><td>(equivalent to quality = 0) </td></tr>
<tr>
<td>fast </td><td>(equivalent to quality = 10) </td></tr>
<tr>
<td>medium </td><td>(equivalent to quality = 60) </td></tr>
<tr>
<td>thorough </td><td>(equivalent to quality = 98) </td></tr>
<tr>
<td>exhaustive </td><td>(equivalent to quality = 100) </td></tr>
</table>
</dd>
<dt>--astc_perceptual </dt>
<dd>The codec should optimize for perceptual error, instead of direct RMS error. This aims to improve perceived image quality, but typically lowers the measured PSNR score. Perceptual methods are currently only available for normal maps and RGB color data. </dd>
</dl>
<dl>
<dt>etc1s: </dt>
<dd>Supercompress the image data with ETC1S / BasisLZ. RED images will become RGB with RED in each component. RG images will have R in the RGB part and G in the alpha part of the compressed texture. When set, the following BasisLZ-related options become valid, otherwise they are ignored. </dd>
<dt>--no_multithreading </dt>
<dd>Disable multithreading. Deprecated. For backward compatibility. Use <b>--threads</b> 1 instead. </dd>
<dt>--clevel &lt;level&gt; </dt>
<dd>ETC1S / BasisLZ compression level, an encoding speed vs. quality tradeoff. Range is [0,5], default is 1. Higher values are slower but give higher quality. </dd>
<dt>--qlevel &lt;level&gt; </dt>
<dd><p class="startdd">ETC1S / BasisLZ quality level. Range is [1,255]. Lower gives better compression/lower quality/faster. Higher gives less compression/higher quality/slower. <b>--qlevel</b> automatically determines values for <b>--max_endpoints</b>, <b>--max-selectors</b>, <b>--endpoint_rdo_threshold</b> and <b>--selector_rdo_threshold</b> for the target quality level. Setting these options overrides the values determined by -qlevel which defaults to 128 if neither it nor both of <b>--max_endpoints</b> and <b>--max_selectors</b> have been set.</p>
<p class="interdd">Note that both of <b>--max_endpoints</b> and <b>--max_selectors</b> must be set for them to have any effect. If all three options are set, a warning will be issued that <b>--qlevel</b> will be ignored.</p>
<p class="enddd">Note also that <b>--qlevel</b> will only determine values for <b>--endpoint_rdo_threshold</b> and <b>--selector_rdo_threshold</b> when its value exceeds 128, otherwise their defaults will be used. </p>
</dd>
<dt>--max_endpoints &lt;arg&gt; </dt>
<dd>Manually set the maximum number of color endpoint clusters. Range is [1,16128]. Default is 0, unset. </dd>
<dt>--endpoint_rdo_threshold &lt;arg&gt; </dt>
<dd>Set endpoint RDO quality threshold. The default is 1.25. Lower is higher quality but less quality per output bit (try [1.0,3.0]). This will override the value chosen by <b>--qlevel</b>. </dd>
<dt>--max_selectors &lt;arg&gt; </dt>
<dd>Manually set the maximum number of color selector clusters from [1,16128]. Default is 0, unset. </dd>
<dt>--selector_rdo_threshold &lt;arg&gt; </dt>
<dd>Set selector RDO quality threshold. The default is 1.25. Lower is higher quality but less quality per output bit (try [1.0,3.0]). This will override the value chosen by <b>--qlevel</b>. </dd>
<dt>--no_endpoint_rdo </dt>
<dd>Disable endpoint rate distortion optimizations. Slightly faster, less noisy output, but lower quality per output bit. Default is to do endpoint RDO. </dd>
<dt>--no_selector_rdo </dt>
<dd>Disable selector rate distortion optimizations. Slightly faster, less noisy output, but lower quality per output bit. Default is to do selector RDO. </dd>
</dl>
<dl>
<dt>uastc: </dt>
<dd>Create a texture in high-quality transcodable UASTC format. </dd>
<dt>--uastc_quality &lt;level&gt; </dt>
<dd><p class="startdd">This optional parameter selects a speed vs quality tradeoff as shown in the following table:</p>
<table class="doxtable">
<tr>
<th>Level</th><th>Speed</th><th>Quality</th></tr>
<tr>
<td>0 </td><td>Fastest </td><td>43.45dB</td></tr>
<tr>
<td>1 </td><td>Faster </td><td>46.49dB</td></tr>
<tr>
<td>2 </td><td>Default </td><td>47.47dB</td></tr>
<tr>
<td>3 </td><td>Slower </td><td>48.01dB</td></tr>
<tr>
<td>4 </td><td>Very slow </td><td>48.24dB</td></tr>
</table>
<p class="enddd">You are strongly encouraged to also specify <b>--zcmp</b> to losslessly compress the UASTC data. This and any LZ-style compression can be made more effective by conditioning the UASTC texture data using the Rate Distortion Optimization (RDO) post-process stage. When uastc encoding is set the following options become available for controlling RDO: </p>
</dd>
<dt>--uastc_rdo_l [&lt;lambda&gt;] </dt>
<dd><p class="startdd">Enable UASTC RDO post-processing and optionally set UASTC RDO quality scalar (lambda) to <em>lambda</em>. Lower values yield higher quality/larger LZ compressed files, higher values yield lower quality/smaller LZ compressed files. A good range to try is [.25,10]. For normal maps a good range is [.25,.75]. The full range is [.001,10.0]. Default is 1.0.</p>
<p class="enddd">Note that previous versions used the <b>--uastc_rdo_q</b> option which was removed because the RDO algorithm changed. </p>
</dd>
<dt>--uastc_rdo_d &lt;dictsize&gt; </dt>
<dd>Set UASTC RDO dictionary size in bytes. Default is 4096. Lower values=faster, but give less compression. Range is [64,65536]. </dd>
<dt>--uastc_rdo_b &lt;scale&gt; </dt>
<dd>Set UASTC RDO max smooth block error scale. Range is [1.0,300.0]. Default is 10.0, 1.0 is disabled. Larger values suppress more artifacts (and allocate more bits) on smooth blocks. </dd>
<dt>--uastc_rdo_s &lt;deviation&gt; </dt>
<dd>Set UASTC RDO max smooth block standard deviation. Range is [.01,65536.0]. Default is 18.0. Larger values expand the range of blocks considered smooth. </dd>
<dt>--uastc_rdo_f </dt>
<dd>Do not favor simpler UASTC modes in RDO mode. </dd>
<dt>--uastc_rdo_m </dt>
<dd>Disable RDO multithreading (slightly higher compression, deterministic). </dd>
</dl>
</dd>
<dt>--input_swizzle &lt;swizzle&gt; </dt>
<dd>Swizzle the input components according to <em>swizzle</em> which is an alhpanumeric sequence matching the regular expression <code>^</code>[rgba01]{4}$. </dd>
<dt>--normal_mode </dt>
<dd><p class="startdd">Only valid for linear textures with two or more components. If the input texture has three or four linear components it is assumed to be a three component linear normal map storing unit length normals as (R=X, G=Y, B=Z). A fourth component will be ignored. The map will be converted to a two component X+Y normal map stored as (RGB=X, A=Y) prior to encoding. If unsure that your normals are unit length, use <b>--normalize</b>. If the input has 2 linear components it is assumed to be an X+Y map of unit normals.</p>
<p class="interdd">The Z component can be recovered programmatically in shader code by using the equations: </p><pre>
nml.xy = texture(...).ga; // Load in [0,1]
nml.xy = nml.xy * 2.0 - 1.0; // Unpack to [-1,1]
nml.z = sqrt(1 - dot(nml.xy, nml.xy)); // Compute Z
</pre><p> For ASTC encoding, '<b>--encode</b> astc', encoder parameters are tuned for better quality on normal maps. For ETC1S encoding, <b>'--encode</b> etc1s', RDO is disabled (no selector RDO, no endpoint RDO) to provide better quality.</p>
<p class="enddd">In <em>toktx</em> you can prevent conversion of the normal map to two components by specifying '<b>--input_swizzle</b> rgb1'. </p>
</dd>
<dt>--normalize </dt>
<dd>Normalize input normals to have a unit length. Only valid for linear textures with 2 or more components. For 2-component inputs 2D unit normals are calculated. Do not use these 2D unit normals to generate X+Y normals for &ndash;normal_mode. For 4-component inputs a 3D unit normal is calculated. 1.0 is used for the value of the 4th component. </dd>
<dt>--no_sse </dt>
<dd>Forbid use of the SSE instruction set. Ignored if CPU does not support SSE. Only the Basis Universal compressor uses SSE. </dd>
<dt>--bcmp </dt>
<dd>Deprecated. Use '<b>--encode</b> etc1s' instead. </dd>
<dt>--uastc [&lt;level&gt;] </dt>
<dd>Deprecated. Use '<b>--encode</b> uastc' instead. </dd>
<dt>--zcmp [&lt;compressionLevel&gt;] </dt>
<dd>Supercompress the data with Zstandard. Implies <b>--t2</b>. Can be used with data in any format except ETC1S / BasisLZ. Most effective with RDO-conditioned UASTC or uncompressed formats. The optional compressionLevel range is 1 - 22 and the default is 3. Lower values=faster but give less compression. Values above 20 should be used with caution as they require more memory. </dd>
<dt>--threads &lt;count&gt; </dt>
<dd>Explicitly set the number of threads to use during compression. By default, ETC1S / BasisLZ and ASTC compression will use the number of threads reported by thread::hardware_concurrency or 1 if value returned is 0. </dd>
<dt>--verbose </dt>
<dd>Print encoder/compressor activity status to stdout. Currently only the astc, etc1s and uastc encoders emit status. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<pre class="fragment"> In case of ambiguity, such as when the last option is one with an optional
parameter, separate options from file names with " -- ".
Any specified ASTC, ETC1S / BasisLZ, UASTC and supercompression options are
recorded in the metadata item @c KTXwriterScParams in the output file.
</pre> <h1 class="doxsection"><a class="anchor" id="ktxsc_exitstatus"></a>
EXIT STATUS</h1>
<p><b>ktxsc</b> exits 0 on success, 1 on command line errors and 2 on functional errors.</p>
<h1 class="doxsection"><a class="anchor" id="ktxsc_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0</dt><dd><ul>
<li>Initial version.</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="ktxsc_author"></a>
AUTHOR</h1>
<p>Mark Callow, github.com/MarkCallow </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
+131
View File
@@ -0,0 +1,131 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
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.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) {
function makeTree(data,relPath) {
let result='';
if ('children' in data) {
result+='<ul>';
for (let i in data.children) {
let url;
const link = data.children[i].url;
if (link.substring(0,1)=='^') {
url = link.substring(1);
} else {
url = relPath+link;
}
result+='<li><a href="'+url+'">'+
data.children[i].text+'</a>'+
makeTree(data.children[i],relPath)+'</li>';
}
result+='</ul>';
}
return result;
}
let searchBoxHtml;
if (searchEnabled) {
if (serverSide) {
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
'<div class="left">'+
'<form id="FSearchBox" action="'+relPath+searchPage+
'" method="get"><span id="MSearchSelectExt" class="search-icon"></span>'+
'<input type="text" id="MSearchField" name="query" value="" placeholder="'+search+
'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+
' onblur="searchBox.OnSearchFieldFocus(false)"/>'+
'</form>'+
'</div>'+
'<div class="right"></div>'+
'</div>';
} else {
searchBoxHtml='<div id="MSearchBox" class="MSearchBoxInactive">'+
'<span class="left">'+
'<span id="MSearchSelect" class="search-icon" onmouseover="return searchBox.OnSearchSelectShow()"'+
' onmouseout="return searchBox.OnSearchSelectHide()"><span class="search-icon-dropdown"></span></span>'+
'<input type="text" id="MSearchField" value="" placeholder="'+search+
'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+
'onblur="searchBox.OnSearchFieldFocus(false)" '+
'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+
'</span>'+
'<span class="right"><a id="MSearchClose" '+
'href="javascript:searchBox.CloseResultsWindow()">'+
'<div id="MSearchCloseImg" class="close-icon"></div></a>'+
'</span>'+
'</div>';
}
}
$('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+
'<label class="main-menu-btn" for="main-menu-state">'+
'<span class="main-menu-btn-icon"></span> '+
'Toggle main menu visibility</label>'+
'<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+
'</div>');
$('#main-nav').append(makeTree(menudata,relPath));
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
$('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>');
const $mainMenuState = $('#main-menu-state');
let prevWidth = 0;
if ($mainMenuState.length) {
const initResizableIfExists = function() {
if (typeof initResizable==='function') initResizable(treeview);
}
// animate mobile menu
$mainMenuState.change(function() {
const $menu = $('#main-menu');
let options = { duration: 250, step: initResizableIfExists };
if (this.checked) {
options['complete'] = () => $menu.css('display', 'block');
$menu.hide().slideDown(options);
} else {
options['complete'] = () => $menu.css('display', 'none');
$menu.show().slideUp(options);
}
});
// set default menu visibility
const resetState = function() {
const $menu = $('#main-menu');
const newWidth = $(window).outerWidth();
if (newWidth!=prevWidth) {
if ($(window).outerWidth()<768) {
$mainMenuState.prop('checked',false); $menu.hide();
$('#searchBoxPos1').html(searchBoxHtml);
$('#searchBoxPos2').hide();
} else {
$menu.show();
$('#searchBoxPos1').empty();
$('#searchBoxPos2').html(searchBoxHtml);
$('#searchBoxPos2').show();
}
if (typeof searchBox!=='undefined') {
searchBox.CloseResultsWindow();
}
prevWidth = newWidth;
}
}
$(window).ready(function() { resetState(); initResizableIfExists(); });
$(window).resize(resetState);
}
$('#main-menu').smartmenus();
}
/* @license-end */
+32
View File
@@ -0,0 +1,32 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
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.
@licend The above is the entire license notice for the JavaScript code in this file
*/
var menudata={children:[
{text:"KTX Tools Reference",url:"index.html"},
{text:"Related Pages",url:"pages.html"},
{text:"Package",url:"../index.html"},
{text:"libktx Reference",url:"../libktx/index.html"},
{text:"KTX Javascript Wrappers Reference",url:"../ktxjswrappers/index.html"},
{text:"pyktx Reference",url:"../pyktx/index.html"},
{text:"License",url:"../license.html"}]}
+327
View File
@@ -0,0 +1,327 @@
#nav-tree .children_ul {
margin:0;
padding:4px;
}
#nav-tree ul {
list-style:none outside none;
margin:0px;
padding:0px;
}
#nav-tree li {
white-space:nowrap;
margin:0;
padding:0;
}
#nav-tree .plus {
margin:0px;
}
#nav-tree .selected {
position: relative;
background-color: var(--nav-menu-active-bg);
border-radius: 0 6px 6px 0;
/*margin-right: 5px;*/
}
#nav-tree img {
margin:0px;
padding:0px;
border:0px;
vertical-align: middle;
}
#nav-tree a {
text-decoration:none;
padding:0px;
margin:0px;
}
#nav-tree .label {
margin:0px;
padding:0px;
font: 12px var(--font-family-nav);
line-height: 22px;
}
#nav-tree .label a {
padding:2px;
}
#nav-tree .selected a {
text-decoration:none;
color:var(--page-link-color);
}
#nav-tree .children_ul {
margin:0px;
padding:0px;
}
#nav-tree .item {
margin: 0 6px 0 -5px;
padding: 0 0 0 5px;
height: 22px;
}
#nav-tree {
padding: 0px 0px;
font-size:14px;
overflow:auto;
}
#doc-content {
overflow:auto;
display:block;
padding:0px;
margin:0px;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
}
#side-nav {
padding:0 6px 0 0;
margin: 0px;
display:block;
position: absolute;
left: 0px;
overflow : hidden;
}
.ui-resizable .ui-resizable-handle {
display:block;
}
.ui-resizable-e {
transition: opacity 0.5s ease;
background-color: var(--nav-splitbar-bg-color);
opacity:0;
cursor:col-resize;
height:100%;
right:0;
top:0;
width:6px;
position: relative;
}
.ui-resizable-e:after {
content: '';
display: block;
top: 50%;
left: 1px;
width: 2px;
height: 15px;
border-left: 1px solid var(--nav-splitbar-handle-color);
border-right: 1px solid var(--nav-splitbar-handle-color);
position: absolute;
}
.ui-resizable-e:hover {
opacity: 1;
}
.ui-resizable-handle {
display:none;
font-size:0.1px;
position:absolute;
z-index:1;
}
#nav-tree-contents {
margin: 6px 0px 0px 0px;
}
#nav-tree {
background-color: var(--nav-background-color);
-webkit-overflow-scrolling : touch; /* iOS 5+ */
scrollbar-width: thin;
border-right: 1px solid var(--nav-border-color);
padding-left: 5px;
}
#nav-sync {
position:absolute;
top:0px;
right:0px;
z-index:1;
}
#nav-sync img {
opacity:0.3;
}
div.nav-sync-icon {
position: relative;
width: 24px;
height: 17px;
left: -6px;
top: -1px;
opacity: 0.7;
display: inline-block;
background-color: var(--sync-icon-background-color);
border: 1px solid var(--sync-icon-border-color);
box-sizing: content-box;
}
div.nav-sync-icon:hover {
background-color: var(--sync-icon-selected-background-color);
opacity: 1.0;
}
div.nav-sync-icon.active:after {
content: '';
background-color: var(--sync-icon-background-color);
border-top: 2px solid var(--sync-icon-color);
position: absolute;
width: 16px;
height: 0px;
top: 7px;
left: 4px;
}
div.nav-sync-icon.active:hover:after {
border-top: 2px solid var(--sync-icon-selected-color);
}
span.sync-icon-left {
position: absolute;
padding: 0;
margin: 0;
top: 3px;
left: 4px;
display: inline-block;
width: 8px;
height: 8px;
border-left: 2px solid var(--sync-icon-color);
border-top: 2px solid var(--sync-icon-color);
transform: rotate(-45deg);
}
span.sync-icon-right {
position: absolute;
padding: 0;
margin: 0;
top: 3px;
left: 10px;
display: inline-block;
width: 8px;
height: 8px;
border-right: 2px solid var(--sync-icon-color);
border-bottom: 2px solid var(--sync-icon-color);
transform: rotate(-45deg);
}
div.nav-sync-icon:hover span.sync-icon-left {
border-left: 2px solid var(--sync-icon-selected-color);
border-top: 2px solid var(--sync-icon-selected-color);
}
div.nav-sync-icon:hover span.sync-icon-right {
border-right: 2px solid var(--sync-icon-selected-color);
border-bottom: 2px solid var(--sync-icon-selected-color);
}
#nav-path ul {
border-top: 1px solid var(--nav-breadcrumb-separator-color);
}
@media print
{
#nav-tree { display: none; }
div.ui-resizable-handle { display: none; position: relative; }
}
/*---------------------------*/
#container {
display: grid;
grid-template-columns: auto auto;
overflow: hidden;
}
#page-nav {
background: var(--nav-background-color);
display: block;
width: 250px;
box-sizing: content-box;
position: relative;
border-left: 1px solid var(--nav-border-color);
}
#page-nav-tree {
display: inline-block;
}
#page-nav-resize-handle {
transition: opacity 0.5s ease;
background-color: var(--nav-splitbar-bg-color);
opacity:0;
cursor:col-resize;
height:100%;
right:0;
top:0;
width:6px;
position: relative;
z-index: 1;
user-select: none;
}
#page-nav-resize-handle:after {
content: '';
display: block;
top: 50%;
left: 1px;
width: 2px;
height: 15px;
border-left: 1px solid var(--nav-splitbar-handle-color);
border-right: 1px solid var(--nav-splitbar-handle-color);
position: absolute;
}
#page-nav-resize-handle.dragging,
#page-nav-resize-handle:hover {
opacity: 1;
}
#page-nav-contents {
padding: 0;
margin: 0;
display: block;
top: 0;
left: 0;
height: 100%;
width: 100%;
position: absolute;
overflow: auto;
scrollbar-width: thin;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
}
ul.page-outline,
ul.page-outline ul {
text-indent: 0;
list-style: none outside none;
padding: 0 0 0 4px;
}
ul.page-outline {
margin: 0 4px 4px 6px;
}
ul.page-outline div.item {
font: 12px var(--font-family-nav);
line-height: 22px;
}
ul.page-outline li {
white-space: nowrap;
}
ul.page-outline li.vis {
background-color: var(--nav-breadcrumb-active-bg);
}
#container.resizing {
cursor: col-resize;
user-select: none;
}
+901
View File
@@ -0,0 +1,901 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
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.
@licend The above is the entire license notice for the JavaScript code in this file
*/
function initNavTree(toroot,relpath,allMembersFile) {
let navTreeSubIndices = [];
const ARROW_DOWN = '<span class="arrowhead opened"></span>';
const ARROW_RIGHT = '<span class="arrowhead closed"></span>';
const NAVPATH_COOKIE_NAME = ''+'navpath';
const fullSidebar = typeof page_layout!=='undefined' && page_layout==1;
function getScrollBarWidth () {
let outer = $('<div>').css({visibility: 'hidden', width: 100, overflow: 'scroll', scrollbarWidth: 'thin'}).appendTo('body');
let widthWithScroll = $('<div>').css({width: '100%'}).appendTo(outer).outerWidth();
outer.remove();
return 100 - widthWithScroll;
}
const scrollbarWidth = getScrollBarWidth();
function adjustSyncIconPosition() {
if (!fullSidebar) {
const nt = document.getElementById("nav-tree");
const hasVerticalScrollbar = nt.scrollHeight > nt.clientHeight;
$("#nav-sync").css({right:parseInt(hasVerticalScrollbar?scrollbarWidth:0)});
}
}
const getData = function(varName) {
const i = varName.lastIndexOf('/');
const n = i>=0 ? varName.substring(i+1) : varName;
const e = n.replace(/-/g,'_');
return window[e];
}
const stripPath = function(uri) {
return uri.substring(uri.lastIndexOf('/')+1);
}
const stripPath2 = function(uri) {
const i = uri.lastIndexOf('/');
const s = uri.substring(i+1);
const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
return m ? uri.substring(i-6) : s;
}
const hashValue = function() {
return $(location).attr('hash').substring(1).replace(/[^\w-]/g,'');
}
const hashUrl = function() {
return '#'+hashValue();
}
const pathName = function() {
return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, '');
}
const storeLink = function(link) {
if (!$("#nav-sync").hasClass('sync')) {
Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0);
}
}
const deleteLink = function() {
Cookie.eraseSetting(NAVPATH_COOKIE_NAME);
}
const cachedLink = function() {
return Cookie.readSetting(NAVPATH_COOKIE_NAME,'');
}
const getScript = function(scriptName,func) {
const head = document.getElementsByTagName("head")[0];
const script = document.createElement('script');
script.id = scriptName;
script.type = 'text/javascript';
script.onload = function() { func(); adjustSyncIconPosition(); }
script.src = scriptName+'.js';
head.appendChild(script);
}
const createIndent = function(o,domNode,node) {
let level=-1;
let n = node;
while (n.parentNode) { level++; n=n.parentNode; }
if (node.childrenData) {
const imgNode = document.createElement("span");
imgNode.className = 'arrow';
imgNode.style.paddingLeft=(16*level).toString()+'px';
imgNode.innerHTML=ARROW_RIGHT;
node.plus_img = imgNode;
node.expandToggle = document.createElement("a");
node.expandToggle.href = "javascript:void(0)";
node.expandToggle.onclick = function() {
if (node.expanded) {
$(node.getChildrenUL()).slideUp("fast",adjustSyncIconPosition);
$(node.plus_img.childNodes[0]).removeClass('opened').addClass('closed');
node.expanded = false;
} else {
expandNode(o, node, false, true);
}
}
node.expandToggle.appendChild(imgNode);
domNode.appendChild(node.expandToggle);
} else {
let span = document.createElement("span");
span.className = 'arrow';
span.style.width = 16*(level+1)+'px';
span.innerHTML = '&#160;';
domNode.appendChild(span);
}
}
let animationInProgress = false;
const gotoAnchor = function(anchor,aname) {
let pos, docContent = $('#doc-content');
let ancParent = $(anchor.parent());
if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') ||
ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') ||
ancParent.is(':header')) {
pos = ancParent.offset().top;
} else if (anchor.position()) {
pos = anchor.offset().top;
}
if (pos) {
const dcOffset = docContent.offset().top;
const dcHeight = docContent.height();
const dcScrHeight = docContent[0].scrollHeight
const dcScrTop = docContent.scrollTop();
let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop));
animationInProgress = true;
docContent.animate({
scrollTop: pos + dcScrTop - dcOffset
},Math.max(50,Math.min(500,dist)),function() {
animationInProgress=false;
if (anchor.parent().attr('class')=='memItemLeft') {
let rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
glowEffect(rows.children(),300); // member without details
} else if (anchor.parent().attr('class')=='fieldname') {
glowEffect(anchor.parent().parent(),1000); // enum value
} else if (anchor.parent().attr('class')=='fieldtype') {
glowEffect(anchor.parent().parent(),1000); // struct field
} else if (anchor.parent().is(":header")) {
glowEffect(anchor.parent(),1000); // section header
} else {
glowEffect(anchor.next(),1000); // normal member
}
});
}
}
function htmlToNode(html) {
const template = document.createElement('template');
template.innerHTML = html;
const nNodes = template.content.childNodes.length;
if (nNodes !== 1) {
throw new Error(`html parameter must represent a single node; got ${nNodes}. `);
}
return template.content.firstChild;
}
const newNode = function(o, po, text, link, childrenData, lastNode) {
const node = {
children : [],
childrenData : childrenData,
depth : po.depth + 1,
relpath : po.relpath,
isLast : lastNode,
li : document.createElement("li"),
parentNode : po,
itemDiv : document.createElement("div"),
labelSpan : document.createElement("span"),
expanded : false,
childrenUL : null,
getChildrenUL : function() {
if (!this.childrenUL) {
this.childrenUL = document.createElement("ul");
this.childrenUL.className = "children_ul";
this.childrenUL.style.display = "none";
this.li.appendChild(node.childrenUL);
}
return node.childrenUL;
},
};
node.itemDiv.className = "item";
node.labelSpan.className = "label";
createIndent(o,node.itemDiv,node);
node.itemDiv.appendChild(node.labelSpan);
node.li.appendChild(node.itemDiv);
const a = document.createElement("a");
node.labelSpan.appendChild(a);
po.getChildrenUL().appendChild(node.li);
a.appendChild(htmlToNode('<span>'+text+'</span>'));
if (link) {
let url;
if (link.substring(0,1)=='^') {
url = link.substring(1);
link = url;
} else {
url = node.relpath+link;
}
a.className = stripPath(link.replace('#',':'));
if (link.indexOf('#')!=-1) {
const aname = '#'+link.split('#')[1];
const srcPage = stripPath(pathName());
const targetPage = stripPath(link.split('#')[0]);
a.href = srcPage!=targetPage ? url : aname;
a.onclick = function() {
storeLink(link);
aPPar = $(a).parent().parent();
if (!aPPar.hasClass('selected')) {
$('.item').removeClass('selected');
$('.item').removeAttr('id');
aPPar.addClass('selected');
aPPar.attr('id','selected');
}
const anchor = $(aname);
gotoAnchor(anchor,aname);
};
} else {
a.href = url;
a.onclick = () => storeLink(link);
}
} else if (childrenData != null) {
a.className = "nolink";
a.href = "javascript:void(0)";
a.onclick = node.expandToggle.onclick;
}
return node;
}
const showRoot = function() {
const headerHeight = $("#top").height();
const footerHeight = $("#nav-path").height();
const windowHeight = $(window).height() - headerHeight - footerHeight;
(function() { // retry until we can scroll to the selected item
try {
const navtree=$('#nav-tree');
navtree.scrollTo('#selected',100,{offset:-windowHeight/2});
} catch (err) {
setTimeout(arguments.callee, 0);
}
})();
}
const expandNode = function(o, node, imm, setFocus) {
if (node.childrenData && !node.expanded) {
if (typeof(node.childrenData)==='string') {
const varName = node.childrenData;
getScript(node.relpath+varName,function() {
node.childrenData = getData(varName);
expandNode(o, node, imm, setFocus);
});
} else {
if (!node.childrenVisited) {
getNode(o, node);
}
$(node.getChildrenUL()).slideDown("fast",adjustSyncIconPosition);
$(node.plus_img.childNodes[0]).addClass('opened').removeClass('closed');
node.expanded = true;
if (setFocus) {
$(node.expandToggle).focus();
}
}
}
}
const glowEffect = function(n,duration) {
n.addClass('glow').delay(duration).queue(function(next) {
$(this).removeClass('glow');next();
});
}
const highlightAnchor = function() {
const aname = hashUrl();
const anchor = $(aname);
gotoAnchor(anchor,aname);
}
const selectAndHighlight = function(hash,n) {
let a;
if (hash) {
const link=stripPath(pathName())+':'+hash.substring(1);
a=$('.item a[class$="'+link+'"]');
}
if (a && a.length) {
a.parent().parent().addClass('selected');
a.parent().parent().attr('id','selected');
highlightAnchor();
} else if (n) {
$(n.itemDiv).addClass('selected');
$(n.itemDiv).attr('id','selected');
}
let topOffset=5;
if ($('#nav-tree-contents .item:first').hasClass('selected')) {
topOffset+=25;
}
showRoot();
}
const showNode = function(o, node, index, hash) {
if (node && node.childrenData) {
if (typeof(node.childrenData)==='string') {
const varName = node.childrenData;
getScript(node.relpath+varName,function() {
node.childrenData = getData(varName);
showNode(o,node,index,hash);
});
} else {
if (!node.childrenVisited) {
getNode(o, node);
}
$(node.getChildrenUL()).css({'display':'block'});
$(node.plus_img.childNodes[0]).removeClass('closed').addClass('opened');
node.expanded = true;
const n = node.children[o.breadcrumbs[index]];
if (index+1<o.breadcrumbs.length) {
showNode(o,n,index+1,hash);
} else if (typeof(n.childrenData)==='string') {
const varName = n.childrenData;
getScript(n.relpath+varName,function() {
n.childrenData = getData(varName);
node.expanded=false;
showNode(o,node,index,hash); // retry with child node expanded
});
} else {
const rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
expandNode(o, n, true, false);
}
selectAndHighlight(hash,n);
}
}
} else {
selectAndHighlight(hash);
}
}
const getNode = function(o, po) {
po.childrenVisited = true;
const l = po.childrenData.length-1;
for (let i in po.childrenData) {
const nodeData = po.childrenData[i];
po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2], i==l);
}
}
const gotoNode = function(o,subIndex,root,hash,relpath) {
const nti = navTreeSubIndices[subIndex][root+hash];
if (nti==undefined && hash.length>0) { // try root page without hash as fallback
gotoUrl(o,root,'',relpath);
} else {
o.breadcrumbs = $.extend(true, [], nti);
if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
navTo(o,NAVTREE[0][1],"",relpath);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
if (o.breadcrumbs) {
o.breadcrumbs.unshift(0); // add 0 for root node
showNode(o, o.node, 0, hash);
}
}
}
const gotoUrl = function(o,root,hash,relpath) {
const url=root+hash;
let i=-1;
while (NAVTREEINDEX[i+1]<=url) i++;
if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash,relpath)
} else {
getScript(relpath+'navtreeindex'+i,function() {
navTreeSubIndices[i] = window['NAVTREEINDEX'+i];
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash,relpath);
}
});
}
}
const navTo = function(o,root,hash,relpath) {
const link = cachedLink();
if (link) {
const parts = link.split('#');
root = parts[0];
hash = parts.length>1 ? '#'+parts[1].replace(/[^\w-]/g,'') : '';
}
if (hash.match(/^#l\d+$/)) {
const anchor=$('a[name='+hash.substring(1)+']');
glowEffect(anchor.parent(),1000); // line number
hash=''; // strip line number anchors
}
gotoUrl(o,root,hash,relpath);
}
const showSyncOff = function(n,relpath) {
n.html('<div class="nav-sync-icon" title="'+SYNCOFFMSG+'"><span class="sync-icon-left"></span><span class="sync-icon-right"></span></div>');
}
const showSyncOn = function(n,relpath) {
n.html('<div class="nav-sync-icon active" title="'+SYNCONMSG+'"><span class="sync-icon-left"></span><span class="sync-icon-right"></span></div>');
}
const o = {
toroot : toroot,
node : {
childrenData : NAVTREE,
children : [],
childrenUL : document.createElement("ul"),
getChildrenUL : function() { return this.childrenUL },
li : document.getElementById("nav-tree-contents"),
depth : 0,
relpath : relpath,
expanded : false,
isLast : true,
plus_img : document.createElement("span"),
},
};
o.node.li.appendChild(o.node.childrenUL);
o.node.plus_img.className = 'arrow';
o.node.plus_img.innerHTML = ARROW_RIGHT;
const navSync = $('#nav-sync');
if (cachedLink()) {
showSyncOff(navSync,relpath);
navSync.removeClass('sync');
} else {
showSyncOn(navSync,relpath);
}
navSync.click(() => {
const navSync = $('#nav-sync');
if (navSync.hasClass('sync')) {
navSync.removeClass('sync');
showSyncOff(navSync,relpath);
storeLink(stripPath2(pathName())+hashUrl());
} else {
navSync.addClass('sync');
showSyncOn(navSync,relpath);
deleteLink();
}
});
navTo(o,toroot,hashUrl(),relpath);
showRoot();
$(window).bind('hashchange', () => {
if (!animationInProgress) {
if (window.location.hash && window.location.hash.length>1) {
let a;
if ($(location).attr('hash')) {
const clslink=stripPath(pathName())+':'+hashValue();
a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
}
if (a==null || !$(a).parent().parent().hasClass('selected')) {
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
const link=stripPath2(pathName());
navTo(o,link,hashUrl(),relpath);
} else {
$('#doc-content').scrollTop(0);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
navTo(o,toroot,hashUrl(),relpath);
}
}
});
$(window).resize(function() { adjustSyncIconPosition(); });
let navtree_trampoline = {
updateContentTop : function() {}
}
function initResizable() {
let sidenav,mainnav,pagenav,container,navtree,content,header,footer,barWidth=6;
const RESIZE_COOKIE_NAME = ''+'width';
const PAGENAV_COOKIE_NAME = ''+'pagenav';
const fullSidebar = typeof page_layout!=='undefined' && page_layout==1;
function showHideNavBar() {
let bar = $('div.sm-dox');
if (fullSidebar && mainnav && bar) {
if (mainnav.width()<768) {
bar.hide();
} else {
bar.show();
}
}
}
function constrainPanelWidths(leftPanelWidth,rightPanelWidth,dragLeft) {
const contentWidth = container.width()-leftPanelWidth-rightPanelWidth;
const minContentWidth = 250;
const minPanelWidth = barWidth;
if (contentWidth<minContentWidth) // need to shrink panels
{
const deficit = minContentWidth - contentWidth;
if (dragLeft) { // dragging left handle -> try to keep right panel width
const shrinkLeft = Math.min(deficit, leftPanelWidth-minPanelWidth);
leftPanelWidth -= shrinkLeft;
const remainingDeficit = deficit - shrinkLeft;
const shrinkRight = Math.min(remainingDeficit, rightPanelWidth-minPanelWidth);
rightPanelWidth -= shrinkRight;
} else { // dragging right handle -> try to keep left panel width
const shrinkRight = Math.min(deficit, rightPanelWidth-minPanelWidth);
rightPanelWidth -= shrinkRight;
const remainingDeficit = deficit - shrinkRight;
const shrinkLeft = Math.min(remainingDeficit, leftPanelWidth-minPanelWidth);
leftPanelWidth -= shrinkLeft;
}
} else {
rightPanelWidth = pagenav.length ? Math.max(minPanelWidth,rightPanelWidth) : 0;
leftPanelWidth = Math.max(minPanelWidth,leftPanelWidth);
}
return { leftPanelWidth, rightPanelWidth }
}
function updateWidths(sidenavWidth,pagenavWidth,dragLeft)
{
const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,dragLeft);
const widthStr = parseFloat(widths.leftPanelWidth)+"px";
content.css({marginLeft:widthStr});
if (fullSidebar) {
footer.css({marginLeft:widthStr});
if (mainnav) {
mainnav.css({marginLeft:widthStr});
}
}
sidenav.css({width:widthStr});
if (pagenav.length) {
container.css({gridTemplateColumns:'auto '+parseFloat(widths.rightPanelWidth)+'px'});
if (!dragLeft) {
pagenav.css({width:parseFloat(widths.rightPanelWidth-1)+'px'});
}
}
return widths;
}
function resizeWidth(dragLeft) {
const sidenavWidth = $(sidenav).outerWidth()-barWidth;
let pagenavWidth = pagenav.length ? $(pagenav).outerWidth() : 0;
const widths = updateWidths(sidenavWidth,pagenavWidth,dragLeft);
Cookie.writeSetting(RESIZE_COOKIE_NAME,widths.leftPanelWidth-barWidth);
if (pagenav.length) {
Cookie.writeSetting(PAGENAV_COOKIE_NAME,widths.rightPanelWidth);
}
}
function restoreWidth(sidenavWidth,pagenavWidth) {
updateWidths(sidenavWidth,pagenavWidth,false);
showHideNavBar();
}
function resizeHeight() {
const headerHeight = header.outerHeight();
const windowHeight = $(window).height();
let contentHeight;
const footerHeight = footer.outerHeight();
let navtreeHeight,sideNavHeight;
if (!fullSidebar) {
contentHeight = windowHeight - headerHeight - footerHeight - 1;
navtreeHeight = contentHeight;
sideNavHeight = contentHeight;
} else if (fullSidebar) {
contentHeight = windowHeight - footerHeight - 1;
navtreeHeight = windowHeight - headerHeight - 1;
sideNavHeight = windowHeight - 1;
if (mainnav) {
contentHeight -= mainnav.outerHeight();
}
}
navtree.css({height:navtreeHeight + "px"});
sidenav.css({height:sideNavHeight + "px"});
content.css({height:contentHeight + "px"});
resizeWidth(false);
showHideNavBar();
if (location.hash.slice(1)) {
(document.getElementById(location.hash.slice(1))||document.body).scrollIntoView();
}
}
header = $("#top");
content = $("#doc-content");
footer = $("#nav-path");
sidenav = $("#side-nav");
if (document.getElementById('main-nav')) {
mainnav = $("#main-nav");
}
navtree = $("#nav-tree");
pagenav = $("#page-nav");
container = $("#container");
$(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(true); } });
$(sidenav).resizable({ minWidth: 0 });
if (pagenav.length) {
pagehandle = $("#page-nav-resize-handle");
pagehandle.on('mousedown touchstart',function(e) {
$('body').addClass('resizing');
pagehandle.addClass('dragging');
$(document).on('mousemove touchmove',function(e) {
const clientX = e.clientX || e.originalEvent.touches[0].clientX;
let pagenavWidth = container[0].offsetWidth-clientX+barWidth/2;
const sidenavWidth = sidenav.width();
const widths = constrainPanelWidths(sidenavWidth,pagenavWidth,false);
container.css({gridTemplateColumns:'auto '+parseFloat(widths.rightPanelWidth)+'px'});
pagenav.css({width:parseFloat(widths.rightPanelWidth-1)+'px'});
content.css({marginLeft:parseFloat(widths.leftPanelWidth)+'px'});
Cookie.writeSetting(PAGENAV_COOKIE_NAME,pagenavWidth);
});
$(document).on('mouseup touchend', function(e) {
$('body').removeClass('resizing');
pagehandle.removeClass('dragging');
$(document).off('mousemove mouseup touchmove touchend');
});
});
} else {
container.css({gridTemplateColumns:'auto'});
}
const width = parseInt(Cookie.readSetting(RESIZE_COOKIE_NAME,250));
const pagenavWidth = parseInt(Cookie.readSetting(PAGENAV_COOKIE_NAME,250));
if (width) { restoreWidth(width+barWidth,pagenavWidth); } else { resizeWidth(); }
const url = location.href;
const i=url.indexOf("#");
if (i>=0) window.location.hash=url.substr(i);
const _preventDefault = function(evt) { evt.preventDefault(); };
$("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
$(window).ready(function() {
let lastWidth = -1;
let lastHeight = -1;
$(window).resize(function() {
const newWidth = $(this).width(), newHeight = $(this).height();
if (newWidth!=lastWidth || newHeight!=lastHeight) {
resizeHeight();
navtree_trampoline.updateContentTop();
lastWidth = newWidth;
lastHeight = newHeight;
}
});
resizeHeight();
lastWidth = $(window).width();
lastHeight = $(window).height();
content.scroll(function() {
navtree_trampoline.updateContentTop();
});
});
}
function initPageToc() {
const topMapping = [];
const toc_contents = $('#page-nav-contents');
const content=$('<ul>').addClass('page-outline');
var entityMap = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#39;',
'/': '&#x2F;',
'`': '&#x60;',
'=': '&#x3D;'
};
function escapeHtml (string) {
return String(string).replace(/[&<>"'`=\/]/g, function (s) {
return entityMap[s];
});
}
// for ClassDef/GroupDef/ModuleDef/ConceptDef/DirDef
const groupSections = [];
let currentGroup = null;
$('h2.groupheader, h2.memtitle').each(function(){
const $element = $(this);
if ($element.hasClass('groupheader')) {
currentGroup = { groupHeader: $element, memTitles: [] };
groupSections.push(currentGroup);
} else if ($element.hasClass('memtitle') && currentGroup) {
currentGroup.memTitles.push($element);
}
});
groupSections.forEach(function(item){
const title = item.groupHeader.text().trim();
let id = item.groupHeader.attr('id');
const table = item.groupHeader.parents('table.memberdecls');
let rows = $();
if (table.length>0) {
rows = table.find("tr[class^='memitem:'] td.memItemRight, tr[class^='memitem:'] td.memItemLeft.anon, tr[class=groupHeader] td");
}
function hasSubItems() {
return item.memTitles.length>0 || rows.toArray().some(function(el) { return $(el).is(':visible'); });
}
const li = $('<li>').attr('id','nav-'+id);
const div = $('<div>').addClass('item');
const span = $('<span>').addClass('arrow').css({ paddingLeft:'0' });
if (hasSubItems()) {
span.append($('<span>').addClass('arrowhead opened'));
}
const ahref = $('<a>').attr('href','#'+id).append(title);
content.append(li.append(div.append(span).append(ahref)));
topMapping.push(id);
const ulStack = [];
ulStack.push(content);
if (hasSubItems()) {
let last_id = undefined;
let inMemberGroup = false;
// declaration sections have rows for items
rows.each(function(){
let td = $(this);
let tr = $(td).parent();
const is_anon_enum = td.contents().first().text().trim()=='{';
if (tr.hasClass('template')) {
tr = tr.prev();
}
id = $(tr).attr('id');
let text = is_anon_enum ? 'anonymous enum' : $(this).find(':first-child').text();
let isMemberGroupHeader = $(tr).hasClass('groupHeader');
if ($(tr).is(":visible") && last_id!=id && id!==undefined) {
if (isMemberGroupHeader && inMemberGroup) {
ulStack.pop();
inMemberGroup=false;
}
const li2 = $('<li>').attr('id','nav-'+id);
const div2 = $('<div>').addClass('item');
const span2 = $('<span>').addClass('arrow').css({ paddingLeft:parseInt(ulStack.length*16)+'px' });
const ahref = $('<a>').attr('href','#'+id).append(escapeHtml(text));
li2.append(div2.append(span2).append(ahref));
topMapping.push(id);
if (isMemberGroupHeader) {
span2.append($('<span>').addClass('arrowhead opened'));
ulStack[ulStack.length-1].append(li2);
const ul2 = $('<ul>');
ulStack.push(ul2);
li2.append(div2).append(ul2);
inMemberGroup=true;
} else {
ulStack[ulStack.length-1].append(li2);
}
last_id=id;
}
});
// detailed documentation has h2.memtitle sections for items
item.memTitles.forEach(function(data) {
const text = $(data).contents().not($(data).children().first()).text();
const name = text.replace(/\(\)(\s*\[\d+\/\d+\])?$/, '') // func() [2/8] -> func
id = $(data).find('span.permalink a').attr('href')
if (id!==undefined && name!==undefined) {
const li2 = $('<li>').attr('id','nav-'+id.substring(1));
const div2 = $('<div>').addClass('item');
const span2 = $('<span>').addClass('arrow').css({paddingLeft:parseInt(ulStack.length*16)+'px'});
const ahref = $('<a>').attr('href',id).append(escapeHtml(name));
ulStack[ulStack.length-1].append(li2.append(div2.append(span2).append(ahref)));
topMapping.push(id.substring(1));
}
});
}
});
if (allMembersFile.length) { // add entry linking to all members page
const url = location.href;
let srcBaseUrl = '';
let dstBaseUrl = '';
if (relpath.length) { // CREATE_SUBDIRS=YES -> find target location
srcBaseUrl = url.substring(0, url.lastIndexOf('/')) + '/' + relpath;
dstBaseUrl = allMembersFile.substr(0, allMembersFile.lastIndexOf('/'))+'/';
}
const pageName = url.split('/').pop().split('#')[0].replace(/(\.[^/.]+)$/, '-members$1');
const li = $('<li>');
const div = $('<div>').addClass('item');
const span = $('<span>').addClass('arrow').css({ paddingLeft:'0' });
const ahref = $('<a>').attr('href',srcBaseUrl+dstBaseUrl+pageName).addClass('noscroll');
content.append(li.append(div.append(span).append(ahref.append(LISTOFALLMEMBERS))));
}
if (groupSections.length==0) {
// for PageDef
const sectionTree = [], sectionStack = [];
$('h1.doxsection, h2.doxsection, h3.doxsection, h4.doxsection, h5.doxsection, h6.doxsection').each(function(){
const level = parseInt(this.tagName[1]);
const anchor = $(this).find('a.anchor').attr('id');
const node = { text: $(this).html(), id: anchor, children: [] };
while (sectionStack.length && sectionStack[sectionStack.length - 1].level >= level) sectionStack.pop();
(sectionStack.length ? sectionStack[sectionStack.length - 1].children : sectionTree).push(node);
sectionStack.push({ ...node, level });
});
if (sectionTree.length>0) {
function render(nodes, level=0) {
nodes.map(n => {
const li = $('<li>').attr('id','nav-'+n.id);
const div = $('<div>').addClass('item');
const span = $('<span>').addClass('arrow').attr('style','padding-left:'+parseInt(level*16)+'px;');
if (n.children.length > 0) { span.append($('<span>').addClass('arrowhead opened')); }
const url = $('<a>').attr('href','#'+n.id);
content.append(li.append(div.append(span).append(url.append(n.text))));
topMapping.push(n.id);
render(n.children,level+1);
});
}
render(sectionTree);
}
}
toc_contents.append(content);
$(".page-outline a[href]:not(.noscroll)").click(function(e) {
e.preventDefault();
const aname = $(this).attr("href");
gotoAnchor($(aname),aname);
});
let lastScrollSourceOffset = -1;
let lastScrollTargetOffset = -1;
let lastScrollTargetId = '';
navtree_trampoline.updateContentTop = function() {
const pagenavcontents = $("#page-nav-contents");
if (pagenavcontents.length) {
const content = $("#doc-content");
const height = content.height();
const navy = pagenavcontents.offset().top;
const yc = content.offset().top;
let offsets = []
for (let i=0;i<topMapping.length;i++) {
const heading = $('#'+topMapping[i]);
if (heading.parent().hasClass('doxsection')) {
offsets.push({id:topMapping[i],y:heading.parent().offset().top-yc});
} else {
offsets.push({id:topMapping[i],y:heading.offset().top-yc});
}
}
offsets.push({id:'',y:1e10});
let scrollTarget = undefined, numItems=0;
for (let i=0;i<topMapping.length;i++) {
const ys = offsets[i].y;
const ye = offsets[i+1].y;
const id = offsets[i].id;
const nav = $('#nav-'+id);
const margin = 10; // #pixels before content show as visible
if ((ys>margin || ye>margin) && (ys<height-margin || ye<height-margin)) {
if (!scrollTarget) scrollTarget=nav;
nav.addClass('vis'); // mark navigation entry as visible within content area
numItems+=1;
} else {
nav.removeClass('vis');
}
}
const contentScrollOffset = $('div.contents').offset().top;
if (scrollTarget && lastScrollTargetId!=scrollTarget.attr('id')) { // new item to scroll to
const scrollDown = contentScrollOffset<lastScrollSourceOffset;
const range = 22*numItems;
const my = range/2-height/2;
const ulOffset = $('ul.page-outline').offset().top-navy;
const targetPos=scrollTarget.offset().top-navy-ulOffset;
const targetOffset=targetPos+my;
if ( (scrollDown && targetOffset>lastScrollTargetOffset) ||
(!scrollDown && targetOffset<lastScrollTargetOffset))
{ // force panel to scroll in the same direction as content window
pagenavcontents.stop(); // avoid build-up of history
pagenavcontents.scrollTo({ left:0, top:targetOffset },{ duration: 500, interrupt: true });
lastScrollTargetOffset = targetOffset;
}
lastScrollTargetId = scrollTarget.attr('id');
}
lastScrollSourceOffset = contentScrollOffset;
}
}
// TODO: find out how to avoid a timeout
setTimeout(() => {
navtree_trampoline.updateContentTop();
},200);
}
$(document).ready(function() { initPageToc(); initResizable(); });
}
/* @license-end */
+171
View File
@@ -0,0 +1,171 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
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.
@licend The above is the entire license notice for the JavaScript code in this file
*/
var NAVTREE =
[
[ "KTX Tools Reference", "index.html", [
[ "Authors", "../authors.html", null ],
[ "LICENSE file for the KhronosGroup/KTX-Software project", "../license.html", null ],
[ "ktx", "ktx.html", [
[ "ktx Overview", "index.html#autotoc_md0", null ],
[ "SYNOPSIS", "ktx.html#ktx_synopsis", null ],
[ "DESCRIPTION", "ktx.html#ktx_description", null ],
[ "OPTIONS", "ktx.html#ktx_main_options", null ],
[ "EXIT STATUS", "ktx.html#ktx_exitstatus", null ],
[ "HISTORY", "ktx.html#ktx_history", null ],
[ "AUTHOR", "ktx.html#ktx_author", null ]
] ],
[ "ktx compare", "ktx_compare.html", [
[ "SYNOPSIS", "ktx_compare.html#ktx_compare_synopsis", null ],
[ "DESCRIPTION", "ktx_compare.html#ktx_compare_description", null ],
[ "OPTIONS", "ktx_compare.html#ktx_compare_options", null ],
[ "EXIT STATUS", "ktx_compare.html#ktx_compare_exitstatus", null ],
[ "HISTORY", "ktx_compare.html#ktx_compare_history", null ],
[ "AUTHOR", "ktx_compare.html#ktx_compare_author", null ]
] ],
[ "ktx create", "ktx_create.html", [
[ "SYNOPSIS", "ktx_create.html#ktx_create_synopsis", null ],
[ "DESCRIPTION", "ktx_create.html#ktx_create_description", null ],
[ "OPTIONS", "ktx_create.html#ktx_create_options", [
[ "General Options", "ktx_create.html#ktx_create_options_general", null ],
[ "Specific and Common Encoding Options", "ktx_create.html#ktx_create_options_encoding", null ]
] ],
[ "TRANSFER FUNCTION HANDLING", "ktx_create.html#ktx_create_tf_handling", [
[ "Details", "ktx_create.html#ktx_create_tf_handling_details", null ],
[ "Changes since last Release", "ktx_create.html#ktx_create_tf_handling_changes", null ]
] ],
[ "EXIT STATUS", "ktx_create.html#ktx_create_exitstatus", null ],
[ "HISTORY", "ktx_create.html#ktx_create_history", null ],
[ "AUTHOR", "ktx_create.html#ktx_create_author", null ]
] ],
[ "ktx deflate", "ktx_deflate.html", [
[ "SYNOPSIS", "ktx_deflate.html#ktx_deflate_synopsis", null ],
[ "DESCRIPTION", "ktx_deflate.html#ktx_deflate_description", null ],
[ "OPTIONS", "ktx_deflate.html#ktx_deflate_options", null ],
[ "EXIT STATUS", "ktx_deflate.html#ktx_deflate_exitstatus", null ],
[ "HISTORY", "ktx_deflate.html#ktx_deflate_history", null ],
[ "AUTHOR", "ktx_deflate.html#ktx_deflate_author", null ]
] ],
[ "ktx encode", "ktx_encode.html", [
[ "SYNOPSIS", "ktx_encode.html#ktx_encode_synopsis", null ],
[ "DESCRIPTION", "ktx_encode.html#ktx_encode_description", null ],
[ "OPTIONS", "ktx_encode.html#ktx_encode_options", [
[ "General Options", "ktx_encode.html#ktx_encode_options_general", null ],
[ "Specific and Common Encoding Options", "ktx_encode.html#ktx_encode_options_encoding", null ]
] ],
[ "EXIT STATUS", "ktx_encode.html#ktx_encode_exitstatus", null ],
[ "HISTORY", "ktx_encode.html#ktx_encode_history", null ],
[ "AUTHOR", "ktx_encode.html#ktx_encode_author", null ]
] ],
[ "ktx extract", "ktx_extract.html", [
[ "SYNOPSIS", "ktx_extract.html#ktx_extract_synopsis", null ],
[ "DESCRIPTION", "ktx_extract.html#ktx_extract_description", null ],
[ "OPTIONS", "ktx_extract.html#ktx_extract_options", null ],
[ "EXIT STATUS", "ktx_extract.html#ktx_extract_exitstatus", null ],
[ "HISTORY", "ktx_extract.html#ktx_extract_history", null ],
[ "AUTHOR", "ktx_extract.html#ktx_extract_author", null ]
] ],
[ "ktx help", "ktx_help.html", [
[ "SYNOPSIS", "ktx_help.html#ktx_help_synopsis", null ],
[ "DESCRIPTION", "ktx_help.html#ktx_help_description", null ],
[ "OPTIONS", "ktx_help.html#ktx_help_options", null ],
[ "EXIT STATUS", "ktx_help.html#ktx_help_exitstatus", null ],
[ "HISTORY", "ktx_help.html#ktx_help_history", null ],
[ "AUTHOR", "ktx_help.html#ktx_help_author", null ]
] ],
[ "ktx info", "ktx_info.html", [
[ "SYNOPSIS", "ktx_info.html#ktx_info_synopsis", null ],
[ "DESCRIPTION", "ktx_info.html#ktx_info_description", null ],
[ "OPTIONS", "ktx_info.html#ktx_info_options", null ],
[ "EXIT STATUS", "ktx_info.html#ktx_info_exitstatus", null ],
[ "HISTORY", "ktx_info.html#ktx_info_history", null ],
[ "AUTHOR", "ktx_info.html#ktx_info_author", null ]
] ],
[ "ktx transcode", "ktx_transcode.html", [
[ "SYNOPSIS", "ktx_transcode.html#ktx_transcode_synopsis", null ],
[ "DESCRIPTION", "ktx_transcode.html#ktx_transcode_description", null ],
[ "OPTIONS", "ktx_transcode.html#ktx_transcode_options", null ],
[ "EXIT STATUS", "ktx_transcode.html#ktx_transcode_exitstatus", null ],
[ "HISTORY", "ktx_transcode.html#ktx_transcode_history", null ],
[ "AUTHOR", "ktx_transcode.html#ktx_transcode_author", null ]
] ],
[ "ktx validate", "ktx_validate.html", [
[ "SYNOPSIS", "ktx_validate.html#ktx_validate_synopsis", null ],
[ "DESCRIPTION", "ktx_validate.html#ktx_validate_description", null ],
[ "OPTIONS", "ktx_validate.html#ktx_validate_options", null ],
[ "EXIT STATUS", "ktx_validate.html#ktx_validate_exitstatus", null ],
[ "HISTORY", "ktx_validate.html#ktx_validate_history", null ],
[ "AUTHOR", "ktx_validate.html#ktx_validate_author", null ]
] ],
[ "ktx2check", "ktx2check.html", [
[ "SYNOPSIS", "ktx2check.html#ktx2check_synopsis", null ],
[ "DESCRIPTION", "ktx2check.html#ktx2check_description", null ],
[ "EXIT STATUS", "ktx2check.html#ktx2check_exitstatus", null ],
[ "HISTORY", "ktx2check.html#ktx2check_history", null ],
[ "AUTHOR", "ktx2check.html#ktx2check_author", null ]
] ],
[ "ktx2ktx2", "ktx2ktx2.html", [
[ "SYNOPSIS", "ktx2ktx2.html#ktx2ktx2_synopsis", null ],
[ "DESCRIPTION", "ktx2ktx2.html#ktx2ktx2_description", null ],
[ "EXIT STATUS", "ktx2ktx2.html#ktx2ktx2_exitstatus", null ],
[ "HISTORY", "ktx2ktx2.html#ktx2ktx2_history", null ],
[ "AUTHOR", "ktx2ktx2.html#ktx2ktx2_author", null ]
] ],
[ "ktxinfo", "ktxinfo.html", [
[ "SYNOPSIS", "ktxinfo.html#ktxinfo_synopsis", null ],
[ "DESCRIPTION", "ktxinfo.html#ktxinfo_description", null ],
[ "EXIT STATUS", "ktxinfo.html#ktxinfo_exitstatus", null ],
[ "HISTORY", "ktxinfo.html#ktxinfo_history", null ],
[ "AUTHOR", "ktxinfo.html#ktxinfo_author", null ]
] ],
[ "ktxsc", "ktxsc.html", [
[ "SYNOPSIS", "ktxsc.html#ktxsc_synopsis", null ],
[ "DESCRIPTION", "ktxsc.html#ktxsc_description", null ],
[ "EXIT STATUS", "ktxsc.html#ktxsc_exitstatus", null ],
[ "HISTORY", "ktxsc.html#ktxsc_history", null ],
[ "AUTHOR", "ktxsc.html#ktxsc_author", null ]
] ],
[ "toktx", "toktx.html", [
[ "SYNOPSIS", "toktx.html#toktx_synopsis", null ],
[ "DESCRIPTION", "toktx.html#toktx_description", null ],
[ "EXIT STATUS", "toktx.html#toktx_exitstatus", null ],
[ "HISTORY", "toktx.html#toktx_history", null ],
[ "AUTHOR", "toktx.html#toktx_author", null ]
] ],
[ "Package", "../index.html", null ],
[ "libktx Reference", "../libktx/index.html", null ],
[ "KTX Javascript Wrappers Reference", "../ktxjswrappers/index.html", null ],
[ "pyktx Reference", "../pyktx/index.html", null ],
[ "License", "../license.html", null ]
] ]
];
var NAVTREEINDEX =
[
"../index.html"
];
var SYNCONMSG = 'click to disable panel synchronization';
var SYNCOFFMSG = 'click to enable panel synchronization';
var LISTOFALLMEMBERS = 'List of all members';
@@ -0,0 +1,120 @@
var NAVTREEINDEX0 =
{
"../index.html":[17],
"../ktxjswrappers/index.html":[19],
"../libktx/index.html":[18],
"../license.html":[21],
"../pyktx/index.html":[20],
"authors.html":[0],
"index.html":[],
"index.html#autotoc_md0":[0],
"ktx.html":[2],
"ktx.html#ktx_author":[2,6],
"ktx.html#ktx_description":[2,2],
"ktx.html#ktx_exitstatus":[2,4],
"ktx.html#ktx_history":[2,5],
"ktx.html#ktx_main_options":[2,3],
"ktx.html#ktx_synopsis":[2,1],
"ktx2check.html":[12],
"ktx2check.html#ktx2check_author":[12,4],
"ktx2check.html#ktx2check_description":[12,1],
"ktx2check.html#ktx2check_exitstatus":[12,2],
"ktx2check.html#ktx2check_history":[12,3],
"ktx2check.html#ktx2check_synopsis":[12,0],
"ktx2ktx2.html":[13],
"ktx2ktx2.html#ktx2ktx2_author":[13,4],
"ktx2ktx2.html#ktx2ktx2_description":[13,1],
"ktx2ktx2.html#ktx2ktx2_exitstatus":[13,2],
"ktx2ktx2.html#ktx2ktx2_history":[13,3],
"ktx2ktx2.html#ktx2ktx2_synopsis":[13,0],
"ktx_compare.html":[3],
"ktx_compare.html#ktx_compare_author":[3,5],
"ktx_compare.html#ktx_compare_description":[3,1],
"ktx_compare.html#ktx_compare_exitstatus":[3,3],
"ktx_compare.html#ktx_compare_history":[3,4],
"ktx_compare.html#ktx_compare_options":[3,2],
"ktx_compare.html#ktx_compare_synopsis":[3,0],
"ktx_create.html":[4],
"ktx_create.html#ktx_create_author":[4,6],
"ktx_create.html#ktx_create_description":[4,1],
"ktx_create.html#ktx_create_exitstatus":[4,4],
"ktx_create.html#ktx_create_history":[4,5],
"ktx_create.html#ktx_create_options":[4,2],
"ktx_create.html#ktx_create_options_encoding":[4,2,1],
"ktx_create.html#ktx_create_options_general":[4,2,0],
"ktx_create.html#ktx_create_synopsis":[4,0],
"ktx_create.html#ktx_create_tf_handling":[4,3],
"ktx_create.html#ktx_create_tf_handling_changes":[4,3,1],
"ktx_create.html#ktx_create_tf_handling_details":[4,3,0],
"ktx_deflate.html":[5],
"ktx_deflate.html#ktx_deflate_author":[5,5],
"ktx_deflate.html#ktx_deflate_description":[5,1],
"ktx_deflate.html#ktx_deflate_exitstatus":[5,3],
"ktx_deflate.html#ktx_deflate_history":[5,4],
"ktx_deflate.html#ktx_deflate_options":[5,2],
"ktx_deflate.html#ktx_deflate_synopsis":[5,0],
"ktx_encode.html":[6],
"ktx_encode.html#ktx_encode_author":[6,5],
"ktx_encode.html#ktx_encode_description":[6,1],
"ktx_encode.html#ktx_encode_exitstatus":[6,3],
"ktx_encode.html#ktx_encode_history":[6,4],
"ktx_encode.html#ktx_encode_options":[6,2],
"ktx_encode.html#ktx_encode_options_encoding":[6,2,1],
"ktx_encode.html#ktx_encode_options_general":[6,2,0],
"ktx_encode.html#ktx_encode_synopsis":[6,0],
"ktx_extract.html":[7],
"ktx_extract.html#ktx_extract_author":[7,5],
"ktx_extract.html#ktx_extract_description":[7,1],
"ktx_extract.html#ktx_extract_exitstatus":[7,3],
"ktx_extract.html#ktx_extract_history":[7,4],
"ktx_extract.html#ktx_extract_options":[7,2],
"ktx_extract.html#ktx_extract_synopsis":[7,0],
"ktx_help.html":[8],
"ktx_help.html#ktx_help_author":[8,5],
"ktx_help.html#ktx_help_description":[8,1],
"ktx_help.html#ktx_help_exitstatus":[8,3],
"ktx_help.html#ktx_help_history":[8,4],
"ktx_help.html#ktx_help_options":[8,2],
"ktx_help.html#ktx_help_synopsis":[8,0],
"ktx_info.html":[9],
"ktx_info.html#ktx_info_author":[9,5],
"ktx_info.html#ktx_info_description":[9,1],
"ktx_info.html#ktx_info_exitstatus":[9,3],
"ktx_info.html#ktx_info_history":[9,4],
"ktx_info.html#ktx_info_options":[9,2],
"ktx_info.html#ktx_info_synopsis":[9,0],
"ktx_transcode.html":[10],
"ktx_transcode.html#ktx_transcode_author":[10,5],
"ktx_transcode.html#ktx_transcode_description":[10,1],
"ktx_transcode.html#ktx_transcode_exitstatus":[10,3],
"ktx_transcode.html#ktx_transcode_history":[10,4],
"ktx_transcode.html#ktx_transcode_options":[10,2],
"ktx_transcode.html#ktx_transcode_synopsis":[10,0],
"ktx_validate.html":[11],
"ktx_validate.html#ktx_validate_author":[11,5],
"ktx_validate.html#ktx_validate_description":[11,1],
"ktx_validate.html#ktx_validate_exitstatus":[11,3],
"ktx_validate.html#ktx_validate_history":[11,4],
"ktx_validate.html#ktx_validate_options":[11,2],
"ktx_validate.html#ktx_validate_synopsis":[11,0],
"ktxinfo.html":[14],
"ktxinfo.html#ktxinfo_author":[14,4],
"ktxinfo.html#ktxinfo_description":[14,1],
"ktxinfo.html#ktxinfo_exitstatus":[14,2],
"ktxinfo.html#ktxinfo_history":[14,3],
"ktxinfo.html#ktxinfo_synopsis":[14,0],
"ktxsc.html":[15],
"ktxsc.html#ktxsc_author":[15,4],
"ktxsc.html#ktxsc_description":[15,1],
"ktxsc.html#ktxsc_exitstatus":[15,2],
"ktxsc.html#ktxsc_history":[15,3],
"ktxsc.html#ktxsc_synopsis":[15,0],
"license.html":[1],
"pages.html":[],
"toktx.html":[16],
"toktx.html#toktx_author":[16,4],
"toktx.html#toktx_description":[16,1],
"toktx.html#toktx_exitstatus":[16,2],
"toktx.html#toktx_history":[16,3],
"toktx.html#toktx_synopsis":[16,0]
};
+127
View File
@@ -0,0 +1,127 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: Related Pages</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('pages.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">Related Pages</div></div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="elRef" href="../authors.html" target="_self">Authors</a>&#160;[external]</td><td class="desc"></td></tr>
<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="elRef" href="../license.html" target="_self">LICENSE file for the KhronosGroup/KTX-Software project</a>&#160;[external]</td><td class="desc"></td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx.html" target="_self">ktx</a></td><td class="desc"></td></tr>
<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx_compare.html" target="_self">ktx compare</a></td><td class="desc"></td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx_create.html" target="_self">ktx create</a></td><td class="desc"></td></tr>
<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx_deflate.html" target="_self">ktx deflate</a></td><td class="desc"></td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx_encode.html" target="_self">ktx encode</a></td><td class="desc"></td></tr>
<tr id="row_7_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx_extract.html" target="_self">ktx extract</a></td><td class="desc"></td></tr>
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx_help.html" target="_self">ktx help</a></td><td class="desc"></td></tr>
<tr id="row_9_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx_info.html" target="_self">ktx info</a></td><td class="desc"></td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx_transcode.html" target="_self">ktx transcode</a></td><td class="desc"></td></tr>
<tr id="row_11_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx_validate.html" target="_self">ktx validate</a></td><td class="desc"></td></tr>
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx2check.html" target="_self">ktx2check</a></td><td class="desc"></td></tr>
<tr id="row_13_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktx2ktx2.html" target="_self">ktx2ktx2</a></td><td class="desc"></td></tr>
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktxinfo.html" target="_self">ktxinfo</a></td><td class="desc"></td></tr>
<tr id="row_15_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ktxsc.html" target="_self">ktxsc</a></td><td class="desc"></td></tr>
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="toktx.html" target="_self">toktx</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,6 @@
var searchData=
[
['and_20common_20encoding_20options_0',['and Common Encoding Options',['../ktx_create.html#ktx_create_options_encoding',1,'Specific and Common Encoding Options'],['../ktx_encode.html#ktx_encode_options_encoding',1,'Specific and Common Encoding Options']]],
['author_1',['AUTHOR',['../ktx.html#ktx_author',1,'AUTHOR'],['../ktx_compare.html#ktx_compare_author',1,'AUTHOR'],['../ktx_create.html#ktx_create_author',1,'AUTHOR'],['../ktx_deflate.html#ktx_deflate_author',1,'AUTHOR'],['../ktx_encode.html#ktx_encode_author',1,'AUTHOR'],['../ktx_extract.html#ktx_extract_author',1,'AUTHOR'],['../ktx_help.html#ktx_help_author',1,'AUTHOR'],['../ktx_info.html#ktx_info_author',1,'AUTHOR'],['../ktx_transcode.html#ktx_transcode_author',1,'AUTHOR'],['../ktx_validate.html#ktx_validate_author',1,'AUTHOR'],['../ktx2check.html#ktx2check_author',1,'AUTHOR'],['../ktx2ktx2.html#ktx2ktx2_author',1,'AUTHOR'],['../ktxinfo.html#ktxinfo_author',1,'AUTHOR'],['../ktxsc.html#ktxsc_author',1,'AUTHOR'],['../toktx.html#toktx_author',1,'AUTHOR']]],
['authors_2',['Authors',['../../authors.html',1,'']]]
];
@@ -0,0 +1,7 @@
var searchData=
[
['changes_20since_20last_20release_0',['Changes since last Release',['../ktx_create.html#ktx_create_tf_handling_changes',1,'']]],
['common_20encoding_20options_1',['Common Encoding Options',['../ktx_create.html#ktx_create_options_encoding',1,'Specific and Common Encoding Options'],['../ktx_encode.html#ktx_encode_options_encoding',1,'Specific and Common Encoding Options']]],
['compare_2',['ktx compare',['../ktx_compare.html',1,'']]],
['create_3',['ktx create',['../ktx_create.html',1,'']]]
];
@@ -0,0 +1,6 @@
var searchData=
[
['deflate_0',['ktx deflate',['../ktx_deflate.html',1,'']]],
['description_1',['DESCRIPTION',['../ktx.html#ktx_description',1,'DESCRIPTION'],['../ktx_compare.html#ktx_compare_description',1,'DESCRIPTION'],['../ktx_create.html#ktx_create_description',1,'DESCRIPTION'],['../ktx_deflate.html#ktx_deflate_description',1,'DESCRIPTION'],['../ktx_encode.html#ktx_encode_description',1,'DESCRIPTION'],['../ktx_extract.html#ktx_extract_description',1,'DESCRIPTION'],['../ktx_help.html#ktx_help_description',1,'DESCRIPTION'],['../ktx_info.html#ktx_info_description',1,'DESCRIPTION'],['../ktx_transcode.html#ktx_transcode_description',1,'DESCRIPTION'],['../ktx_validate.html#ktx_validate_description',1,'DESCRIPTION'],['../ktx2check.html#ktx2check_description',1,'DESCRIPTION'],['../ktx2ktx2.html#ktx2ktx2_description',1,'DESCRIPTION'],['../ktxinfo.html#ktxinfo_description',1,'DESCRIPTION'],['../ktxsc.html#ktxsc_description',1,'DESCRIPTION'],['../toktx.html#toktx_description',1,'DESCRIPTION']]],
['details_2',['Details',['../ktx_create.html#ktx_create_tf_handling_details',1,'']]]
];
@@ -0,0 +1,7 @@
var searchData=
[
['encode_0',['ktx encode',['../ktx_encode.html',1,'']]],
['encoding_20options_1',['Encoding Options',['../ktx_create.html#ktx_create_options_encoding',1,'Specific and Common Encoding Options'],['../ktx_encode.html#ktx_encode_options_encoding',1,'Specific and Common Encoding Options']]],
['exit_20status_2',['EXIT STATUS',['../ktx.html#ktx_exitstatus',1,'EXIT STATUS'],['../ktx_compare.html#ktx_compare_exitstatus',1,'EXIT STATUS'],['../ktx_create.html#ktx_create_exitstatus',1,'EXIT STATUS'],['../ktx_deflate.html#ktx_deflate_exitstatus',1,'EXIT STATUS'],['../ktx_encode.html#ktx_encode_exitstatus',1,'EXIT STATUS'],['../ktx_extract.html#ktx_extract_exitstatus',1,'EXIT STATUS'],['../ktx_help.html#ktx_help_exitstatus',1,'EXIT STATUS'],['../ktx_info.html#ktx_info_exitstatus',1,'EXIT STATUS'],['../ktx_transcode.html#ktx_transcode_exitstatus',1,'EXIT STATUS'],['../ktx_validate.html#ktx_validate_exitstatus',1,'EXIT STATUS'],['../ktx2check.html#ktx2check_exitstatus',1,'EXIT STATUS'],['../ktx2ktx2.html#ktx2ktx2_exitstatus',1,'EXIT STATUS'],['../ktxinfo.html#ktxinfo_exitstatus',1,'EXIT STATUS'],['../ktxsc.html#ktxsc_exitstatus',1,'EXIT STATUS'],['../toktx.html#toktx_exitstatus',1,'EXIT STATUS']]],
['extract_3',['ktx extract',['../ktx_extract.html',1,'']]]
];
@@ -0,0 +1,6 @@
var searchData=
[
['file_20for_20the_20khronosgroup_20ktx_20software_20project_0',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['for_20the_20khronosgroup_20ktx_20software_20project_1',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['function_20handling_2',['TRANSFER FUNCTION HANDLING',['../ktx_create.html#ktx_create_tf_handling',1,'']]]
];
@@ -0,0 +1,4 @@
var searchData=
[
['general_20options_0',['General Options',['../ktx_create.html#ktx_create_options_general',1,'General Options'],['../ktx_encode.html#ktx_encode_options_general',1,'General Options']]]
];
@@ -0,0 +1,6 @@
var searchData=
[
['handling_0',['TRANSFER FUNCTION HANDLING',['../ktx_create.html#ktx_create_tf_handling',1,'']]],
['help_1',['ktx help',['../ktx_help.html',1,'']]],
['history_2',['HISTORY',['../ktx.html#ktx_history',1,'HISTORY'],['../ktx_compare.html#ktx_compare_history',1,'HISTORY'],['../ktx_create.html#ktx_create_history',1,'HISTORY'],['../ktx_deflate.html#ktx_deflate_history',1,'HISTORY'],['../ktx_encode.html#ktx_encode_history',1,'HISTORY'],['../ktx_extract.html#ktx_extract_history',1,'HISTORY'],['../ktx_help.html#ktx_help_history',1,'HISTORY'],['../ktx_info.html#ktx_info_history',1,'HISTORY'],['../ktx_transcode.html#ktx_transcode_history',1,'HISTORY'],['../ktx_validate.html#ktx_validate_history',1,'HISTORY'],['../ktx2check.html#ktx2check_history',1,'HISTORY'],['../ktx2ktx2.html#ktx2ktx2_history',1,'HISTORY'],['../ktxinfo.html#ktxinfo_history',1,'HISTORY'],['../ktxsc.html#ktxsc_history',1,'HISTORY'],['../toktx.html#toktx_history',1,'HISTORY']]]
];
@@ -0,0 +1,4 @@
var searchData=
[
['info_0',['ktx info',['../ktx_info.html',1,'']]]
];
@@ -0,0 +1,21 @@
var searchData=
[
['khronosgroup_20ktx_20software_20project_0',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['ktx_1',['ktx',['../ktx.html',1,'']]],
['ktx_20compare_2',['ktx compare',['../ktx_compare.html',1,'']]],
['ktx_20create_3',['ktx create',['../ktx_create.html',1,'']]],
['ktx_20deflate_4',['ktx deflate',['../ktx_deflate.html',1,'']]],
['ktx_20encode_5',['ktx encode',['../ktx_encode.html',1,'']]],
['ktx_20extract_6',['ktx extract',['../ktx_extract.html',1,'']]],
['ktx_20help_7',['ktx help',['../ktx_help.html',1,'']]],
['ktx_20info_8',['ktx info',['../ktx_info.html',1,'']]],
['ktx_20overview_9',['ktx Overview',['../index.html#autotoc_md0',1,'']]],
['ktx_20software_20project_10',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['ktx_20tools_20reference_11',['KTX Tools Reference',['../index.html',1,'']]],
['ktx_20transcode_12',['ktx transcode',['../ktx_transcode.html',1,'']]],
['ktx_20validate_13',['ktx validate',['../ktx_validate.html',1,'']]],
['ktx2check_14',['ktx2check',['../ktx2check.html',1,'']]],
['ktx2ktx2_15',['ktx2ktx2',['../ktx2ktx2.html',1,'']]],
['ktxinfo_16',['ktxinfo',['../ktxinfo.html',1,'']]],
['ktxsc_17',['ktxsc',['../ktxsc.html',1,'']]]
];
@@ -0,0 +1,5 @@
var searchData=
[
['last_20release_0',['Changes since last Release',['../ktx_create.html#ktx_create_tf_handling_changes',1,'']]],
['license_20file_20for_20the_20khronosgroup_20ktx_20software_20project_1',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]]
];
@@ -0,0 +1,6 @@
var searchData=
[
['options_0',['OPTIONS',['../ktx.html#ktx_main_options',1,'OPTIONS'],['../ktx_compare.html#ktx_compare_options',1,'OPTIONS'],['../ktx_create.html#ktx_create_options',1,'OPTIONS'],['../ktx_deflate.html#ktx_deflate_options',1,'OPTIONS'],['../ktx_encode.html#ktx_encode_options',1,'OPTIONS'],['../ktx_extract.html#ktx_extract_options',1,'OPTIONS'],['../ktx_help.html#ktx_help_options',1,'OPTIONS'],['../ktx_info.html#ktx_info_options',1,'OPTIONS'],['../ktx_transcode.html#ktx_transcode_options',1,'OPTIONS'],['../ktx_validate.html#ktx_validate_options',1,'OPTIONS']]],
['options_1',['Options',['../ktx_create.html#ktx_create_options_general',1,'General Options'],['../ktx_encode.html#ktx_encode_options_general',1,'General Options'],['../ktx_create.html#ktx_create_options_encoding',1,'Specific and Common Encoding Options'],['../ktx_encode.html#ktx_encode_options_encoding',1,'Specific and Common Encoding Options']]],
['overview_2',['ktx Overview',['../index.html#autotoc_md0',1,'']]]
];
@@ -0,0 +1,4 @@
var searchData=
[
['project_0',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]]
];
@@ -0,0 +1,5 @@
var searchData=
[
['reference_0',['KTX Tools Reference',['../index.html',1,'']]],
['release_1',['Changes since last Release',['../ktx_create.html#ktx_create_tf_handling_changes',1,'']]]
];
@@ -0,0 +1,8 @@
var searchData=
[
['since_20last_20release_0',['Changes since last Release',['../ktx_create.html#ktx_create_tf_handling_changes',1,'']]],
['software_20project_1',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['specific_20and_20common_20encoding_20options_2',['Specific and Common Encoding Options',['../ktx_create.html#ktx_create_options_encoding',1,'Specific and Common Encoding Options'],['../ktx_encode.html#ktx_encode_options_encoding',1,'Specific and Common Encoding Options']]],
['status_3',['STATUS',['../ktx.html#ktx_exitstatus',1,'EXIT STATUS'],['../ktx_compare.html#ktx_compare_exitstatus',1,'EXIT STATUS'],['../ktx_create.html#ktx_create_exitstatus',1,'EXIT STATUS'],['../ktx_deflate.html#ktx_deflate_exitstatus',1,'EXIT STATUS'],['../ktx_encode.html#ktx_encode_exitstatus',1,'EXIT STATUS'],['../ktx_extract.html#ktx_extract_exitstatus',1,'EXIT STATUS'],['../ktx_help.html#ktx_help_exitstatus',1,'EXIT STATUS'],['../ktx_info.html#ktx_info_exitstatus',1,'EXIT STATUS'],['../ktx_transcode.html#ktx_transcode_exitstatus',1,'EXIT STATUS'],['../ktx_validate.html#ktx_validate_exitstatus',1,'EXIT STATUS'],['../ktx2check.html#ktx2check_exitstatus',1,'EXIT STATUS'],['../ktx2ktx2.html#ktx2ktx2_exitstatus',1,'EXIT STATUS'],['../ktxinfo.html#ktxinfo_exitstatus',1,'EXIT STATUS'],['../ktxsc.html#ktxsc_exitstatus',1,'EXIT STATUS'],['../toktx.html#toktx_exitstatus',1,'EXIT STATUS']]],
['synopsis_4',['SYNOPSIS',['../ktx.html#ktx_synopsis',1,'SYNOPSIS'],['../ktx_compare.html#ktx_compare_synopsis',1,'SYNOPSIS'],['../ktx_create.html#ktx_create_synopsis',1,'SYNOPSIS'],['../ktx_deflate.html#ktx_deflate_synopsis',1,'SYNOPSIS'],['../ktx_encode.html#ktx_encode_synopsis',1,'SYNOPSIS'],['../ktx_extract.html#ktx_extract_synopsis',1,'SYNOPSIS'],['../ktx_help.html#ktx_help_synopsis',1,'SYNOPSIS'],['../ktx_info.html#ktx_info_synopsis',1,'SYNOPSIS'],['../ktx_transcode.html#ktx_transcode_synopsis',1,'SYNOPSIS'],['../ktx_validate.html#ktx_validate_synopsis',1,'SYNOPSIS'],['../ktx2check.html#ktx2check_synopsis',1,'SYNOPSIS'],['../ktx2ktx2.html#ktx2ktx2_synopsis',1,'SYNOPSIS'],['../ktxinfo.html#ktxinfo_synopsis',1,'SYNOPSIS'],['../ktxsc.html#ktxsc_synopsis',1,'SYNOPSIS'],['../toktx.html#toktx_synopsis',1,'SYNOPSIS']]]
];
@@ -0,0 +1,8 @@
var searchData=
[
['the_20khronosgroup_20ktx_20software_20project_0',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['toktx_1',['toktx',['../toktx.html',1,'']]],
['tools_20reference_2',['KTX Tools Reference',['../index.html',1,'']]],
['transcode_3',['ktx transcode',['../ktx_transcode.html',1,'']]],
['transfer_20function_20handling_4',['TRANSFER FUNCTION HANDLING',['../ktx_create.html#ktx_create_tf_handling',1,'']]]
];
@@ -0,0 +1,4 @@
var searchData=
[
['validate_0',['ktx validate',['../ktx_validate.html',1,'']]]
];
@@ -0,0 +1,6 @@
var searchData=
[
['and_20common_20encoding_20options_0',['and Common Encoding Options',['../ktx_create.html#ktx_create_options_encoding',1,'Specific and Common Encoding Options'],['../ktx_encode.html#ktx_encode_options_encoding',1,'Specific and Common Encoding Options']]],
['author_1',['AUTHOR',['../ktx.html#ktx_author',1,'AUTHOR'],['../ktx_compare.html#ktx_compare_author',1,'AUTHOR'],['../ktx_create.html#ktx_create_author',1,'AUTHOR'],['../ktx_deflate.html#ktx_deflate_author',1,'AUTHOR'],['../ktx_encode.html#ktx_encode_author',1,'AUTHOR'],['../ktx_extract.html#ktx_extract_author',1,'AUTHOR'],['../ktx_help.html#ktx_help_author',1,'AUTHOR'],['../ktx_info.html#ktx_info_author',1,'AUTHOR'],['../ktx_transcode.html#ktx_transcode_author',1,'AUTHOR'],['../ktx_validate.html#ktx_validate_author',1,'AUTHOR'],['../ktx2check.html#ktx2check_author',1,'AUTHOR'],['../ktx2ktx2.html#ktx2ktx2_author',1,'AUTHOR'],['../ktxinfo.html#ktxinfo_author',1,'AUTHOR'],['../ktxsc.html#ktxsc_author',1,'AUTHOR'],['../toktx.html#toktx_author',1,'AUTHOR']]],
['authors_2',['Authors',['../../authors.html',1,'']]]
];
@@ -0,0 +1,7 @@
var searchData=
[
['changes_20since_20last_20release_0',['Changes since last Release',['../ktx_create.html#ktx_create_tf_handling_changes',1,'']]],
['common_20encoding_20options_1',['Common Encoding Options',['../ktx_create.html#ktx_create_options_encoding',1,'Specific and Common Encoding Options'],['../ktx_encode.html#ktx_encode_options_encoding',1,'Specific and Common Encoding Options']]],
['compare_2',['ktx compare',['../ktx_compare.html',1,'']]],
['create_3',['ktx create',['../ktx_create.html',1,'']]]
];
@@ -0,0 +1,6 @@
var searchData=
[
['deflate_0',['ktx deflate',['../ktx_deflate.html',1,'']]],
['description_1',['DESCRIPTION',['../ktx.html#ktx_description',1,'DESCRIPTION'],['../ktx_compare.html#ktx_compare_description',1,'DESCRIPTION'],['../ktx_create.html#ktx_create_description',1,'DESCRIPTION'],['../ktx_deflate.html#ktx_deflate_description',1,'DESCRIPTION'],['../ktx_encode.html#ktx_encode_description',1,'DESCRIPTION'],['../ktx_extract.html#ktx_extract_description',1,'DESCRIPTION'],['../ktx_help.html#ktx_help_description',1,'DESCRIPTION'],['../ktx_info.html#ktx_info_description',1,'DESCRIPTION'],['../ktx_transcode.html#ktx_transcode_description',1,'DESCRIPTION'],['../ktx_validate.html#ktx_validate_description',1,'DESCRIPTION'],['../ktx2check.html#ktx2check_description',1,'DESCRIPTION'],['../ktx2ktx2.html#ktx2ktx2_description',1,'DESCRIPTION'],['../ktxinfo.html#ktxinfo_description',1,'DESCRIPTION'],['../ktxsc.html#ktxsc_description',1,'DESCRIPTION'],['../toktx.html#toktx_description',1,'DESCRIPTION']]],
['details_2',['Details',['../ktx_create.html#ktx_create_tf_handling_details',1,'']]]
];
@@ -0,0 +1,7 @@
var searchData=
[
['encode_0',['ktx encode',['../ktx_encode.html',1,'']]],
['encoding_20options_1',['Encoding Options',['../ktx_create.html#ktx_create_options_encoding',1,'Specific and Common Encoding Options'],['../ktx_encode.html#ktx_encode_options_encoding',1,'Specific and Common Encoding Options']]],
['exit_20status_2',['EXIT STATUS',['../ktx.html#ktx_exitstatus',1,'EXIT STATUS'],['../ktx_compare.html#ktx_compare_exitstatus',1,'EXIT STATUS'],['../ktx_create.html#ktx_create_exitstatus',1,'EXIT STATUS'],['../ktx_deflate.html#ktx_deflate_exitstatus',1,'EXIT STATUS'],['../ktx_encode.html#ktx_encode_exitstatus',1,'EXIT STATUS'],['../ktx_extract.html#ktx_extract_exitstatus',1,'EXIT STATUS'],['../ktx_help.html#ktx_help_exitstatus',1,'EXIT STATUS'],['../ktx_info.html#ktx_info_exitstatus',1,'EXIT STATUS'],['../ktx_transcode.html#ktx_transcode_exitstatus',1,'EXIT STATUS'],['../ktx_validate.html#ktx_validate_exitstatus',1,'EXIT STATUS'],['../ktx2check.html#ktx2check_exitstatus',1,'EXIT STATUS'],['../ktx2ktx2.html#ktx2ktx2_exitstatus',1,'EXIT STATUS'],['../ktxinfo.html#ktxinfo_exitstatus',1,'EXIT STATUS'],['../ktxsc.html#ktxsc_exitstatus',1,'EXIT STATUS'],['../toktx.html#toktx_exitstatus',1,'EXIT STATUS']]],
['extract_3',['ktx extract',['../ktx_extract.html',1,'']]]
];
@@ -0,0 +1,6 @@
var searchData=
[
['file_20for_20the_20khronosgroup_20ktx_20software_20project_0',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['for_20the_20khronosgroup_20ktx_20software_20project_1',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['function_20handling_2',['TRANSFER FUNCTION HANDLING',['../ktx_create.html#ktx_create_tf_handling',1,'']]]
];
@@ -0,0 +1,4 @@
var searchData=
[
['general_20options_0',['General Options',['../ktx_create.html#ktx_create_options_general',1,'General Options'],['../ktx_encode.html#ktx_encode_options_general',1,'General Options']]]
];
@@ -0,0 +1,6 @@
var searchData=
[
['handling_0',['TRANSFER FUNCTION HANDLING',['../ktx_create.html#ktx_create_tf_handling',1,'']]],
['help_1',['ktx help',['../ktx_help.html',1,'']]],
['history_2',['HISTORY',['../ktx.html#ktx_history',1,'HISTORY'],['../ktx_compare.html#ktx_compare_history',1,'HISTORY'],['../ktx_create.html#ktx_create_history',1,'HISTORY'],['../ktx_deflate.html#ktx_deflate_history',1,'HISTORY'],['../ktx_encode.html#ktx_encode_history',1,'HISTORY'],['../ktx_extract.html#ktx_extract_history',1,'HISTORY'],['../ktx_help.html#ktx_help_history',1,'HISTORY'],['../ktx_info.html#ktx_info_history',1,'HISTORY'],['../ktx_transcode.html#ktx_transcode_history',1,'HISTORY'],['../ktx_validate.html#ktx_validate_history',1,'HISTORY'],['../ktx2check.html#ktx2check_history',1,'HISTORY'],['../ktx2ktx2.html#ktx2ktx2_history',1,'HISTORY'],['../ktxinfo.html#ktxinfo_history',1,'HISTORY'],['../ktxsc.html#ktxsc_history',1,'HISTORY'],['../toktx.html#toktx_history',1,'HISTORY']]]
];
@@ -0,0 +1,4 @@
var searchData=
[
['info_0',['ktx info',['../ktx_info.html',1,'']]]
];
@@ -0,0 +1,21 @@
var searchData=
[
['khronosgroup_20ktx_20software_20project_0',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['ktx_1',['ktx',['../ktx.html',1,'']]],
['ktx_20compare_2',['ktx compare',['../ktx_compare.html',1,'']]],
['ktx_20create_3',['ktx create',['../ktx_create.html',1,'']]],
['ktx_20deflate_4',['ktx deflate',['../ktx_deflate.html',1,'']]],
['ktx_20encode_5',['ktx encode',['../ktx_encode.html',1,'']]],
['ktx_20extract_6',['ktx extract',['../ktx_extract.html',1,'']]],
['ktx_20help_7',['ktx help',['../ktx_help.html',1,'']]],
['ktx_20info_8',['ktx info',['../ktx_info.html',1,'']]],
['ktx_20overview_9',['ktx Overview',['../index.html#autotoc_md0',1,'']]],
['ktx_20software_20project_10',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['ktx_20tools_20reference_11',['KTX Tools Reference',['../index.html',1,'']]],
['ktx_20transcode_12',['ktx transcode',['../ktx_transcode.html',1,'']]],
['ktx_20validate_13',['ktx validate',['../ktx_validate.html',1,'']]],
['ktx2check_14',['ktx2check',['../ktx2check.html',1,'']]],
['ktx2ktx2_15',['ktx2ktx2',['../ktx2ktx2.html',1,'']]],
['ktxinfo_16',['ktxinfo',['../ktxinfo.html',1,'']]],
['ktxsc_17',['ktxsc',['../ktxsc.html',1,'']]]
];
@@ -0,0 +1,5 @@
var searchData=
[
['last_20release_0',['Changes since last Release',['../ktx_create.html#ktx_create_tf_handling_changes',1,'']]],
['license_20file_20for_20the_20khronosgroup_20ktx_20software_20project_1',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]]
];
@@ -0,0 +1,6 @@
var searchData=
[
['options_0',['OPTIONS',['../ktx.html#ktx_main_options',1,'OPTIONS'],['../ktx_compare.html#ktx_compare_options',1,'OPTIONS'],['../ktx_create.html#ktx_create_options',1,'OPTIONS'],['../ktx_deflate.html#ktx_deflate_options',1,'OPTIONS'],['../ktx_encode.html#ktx_encode_options',1,'OPTIONS'],['../ktx_extract.html#ktx_extract_options',1,'OPTIONS'],['../ktx_help.html#ktx_help_options',1,'OPTIONS'],['../ktx_info.html#ktx_info_options',1,'OPTIONS'],['../ktx_transcode.html#ktx_transcode_options',1,'OPTIONS'],['../ktx_validate.html#ktx_validate_options',1,'OPTIONS']]],
['options_1',['Options',['../ktx_create.html#ktx_create_options_general',1,'General Options'],['../ktx_encode.html#ktx_encode_options_general',1,'General Options'],['../ktx_create.html#ktx_create_options_encoding',1,'Specific and Common Encoding Options'],['../ktx_encode.html#ktx_encode_options_encoding',1,'Specific and Common Encoding Options']]],
['overview_2',['ktx Overview',['../index.html#autotoc_md0',1,'']]]
];
@@ -0,0 +1,4 @@
var searchData=
[
['project_0',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]]
];
@@ -0,0 +1,5 @@
var searchData=
[
['reference_0',['KTX Tools Reference',['../index.html',1,'']]],
['release_1',['Changes since last Release',['../ktx_create.html#ktx_create_tf_handling_changes',1,'']]]
];
@@ -0,0 +1,8 @@
var searchData=
[
['since_20last_20release_0',['Changes since last Release',['../ktx_create.html#ktx_create_tf_handling_changes',1,'']]],
['software_20project_1',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['specific_20and_20common_20encoding_20options_2',['Specific and Common Encoding Options',['../ktx_create.html#ktx_create_options_encoding',1,'Specific and Common Encoding Options'],['../ktx_encode.html#ktx_encode_options_encoding',1,'Specific and Common Encoding Options']]],
['status_3',['STATUS',['../ktx.html#ktx_exitstatus',1,'EXIT STATUS'],['../ktx_compare.html#ktx_compare_exitstatus',1,'EXIT STATUS'],['../ktx_create.html#ktx_create_exitstatus',1,'EXIT STATUS'],['../ktx_deflate.html#ktx_deflate_exitstatus',1,'EXIT STATUS'],['../ktx_encode.html#ktx_encode_exitstatus',1,'EXIT STATUS'],['../ktx_extract.html#ktx_extract_exitstatus',1,'EXIT STATUS'],['../ktx_help.html#ktx_help_exitstatus',1,'EXIT STATUS'],['../ktx_info.html#ktx_info_exitstatus',1,'EXIT STATUS'],['../ktx_transcode.html#ktx_transcode_exitstatus',1,'EXIT STATUS'],['../ktx_validate.html#ktx_validate_exitstatus',1,'EXIT STATUS'],['../ktx2check.html#ktx2check_exitstatus',1,'EXIT STATUS'],['../ktx2ktx2.html#ktx2ktx2_exitstatus',1,'EXIT STATUS'],['../ktxinfo.html#ktxinfo_exitstatus',1,'EXIT STATUS'],['../ktxsc.html#ktxsc_exitstatus',1,'EXIT STATUS'],['../toktx.html#toktx_exitstatus',1,'EXIT STATUS']]],
['synopsis_4',['SYNOPSIS',['../ktx.html#ktx_synopsis',1,'SYNOPSIS'],['../ktx_compare.html#ktx_compare_synopsis',1,'SYNOPSIS'],['../ktx_create.html#ktx_create_synopsis',1,'SYNOPSIS'],['../ktx_deflate.html#ktx_deflate_synopsis',1,'SYNOPSIS'],['../ktx_encode.html#ktx_encode_synopsis',1,'SYNOPSIS'],['../ktx_extract.html#ktx_extract_synopsis',1,'SYNOPSIS'],['../ktx_help.html#ktx_help_synopsis',1,'SYNOPSIS'],['../ktx_info.html#ktx_info_synopsis',1,'SYNOPSIS'],['../ktx_transcode.html#ktx_transcode_synopsis',1,'SYNOPSIS'],['../ktx_validate.html#ktx_validate_synopsis',1,'SYNOPSIS'],['../ktx2check.html#ktx2check_synopsis',1,'SYNOPSIS'],['../ktx2ktx2.html#ktx2ktx2_synopsis',1,'SYNOPSIS'],['../ktxinfo.html#ktxinfo_synopsis',1,'SYNOPSIS'],['../ktxsc.html#ktxsc_synopsis',1,'SYNOPSIS'],['../toktx.html#toktx_synopsis',1,'SYNOPSIS']]]
];
@@ -0,0 +1,8 @@
var searchData=
[
['the_20khronosgroup_20ktx_20software_20project_0',['LICENSE file for the KhronosGroup/KTX-Software project',['../../license.html',1,'']]],
['toktx_1',['toktx',['../toktx.html',1,'']]],
['tools_20reference_2',['KTX Tools Reference',['../index.html',1,'']]],
['transcode_3',['ktx transcode',['../ktx_transcode.html',1,'']]],
['transfer_20function_20handling_4',['TRANSFER FUNCTION HANDLING',['../ktx_create.html#ktx_create_tf_handling',1,'']]]
];
@@ -0,0 +1,4 @@
var searchData=
[
['validate_0',['ktx validate',['../ktx_validate.html',1,'']]]
];
@@ -0,0 +1,377 @@
/*---------------- Search Box positioning */
#main-menu > li:last-child {
/* This <li> object is the parent of the search bar */
display: flex;
justify-content: center;
align-items: center;
height: 43px;
margin-right: 0;
}
/*---------------- Search box styling */
.SRPage * {
font-weight: normal;
line-height: normal;
}
dark-mode-toggle {
margin-left: 5px;
display: flex;
float: right;
}
#MSearchBox {
display: inline-block;
white-space : nowrap;
background: var(--search-background-color);
border-radius: 0.65em;
border: 1px solid var(--search-box-border-color);
z-index: 102;
margin-right: 4px;
}
#MSearchBox .left {
display: inline-block;
vertical-align: middle;
height: 1.6em;
}
#MSearchField {
display: inline-block;
vertical-align: top;
width: 7.5em;
height: 22px;
margin: 0 0 0 0.15em;
padding: 0;
line-height: 1em;
border:none;
color: var(--search-foreground-color);
outline: none;
font-family: var(--font-family-search);
-webkit-border-radius: 0px;
border-radius: 0px;
background: none;
}
@media(hover: none) {
/* to avoid zooming on iOS */
#MSearchField {
font-size: 16px;
}
}
#MSearchBox .right {
display: inline-block;
vertical-align: middle;
width: 1.4em;
height: 1.6em;
}
#MSearchClose {
display: none;
font-size: inherit;
background : none;
border: none;
margin: 0;
padding: 0;
outline: none;
}
#MSearchCloseImg {
margin: 6px 0 0 4px;
}
.close-icon {
width: 11px;
height: 11px;
background-color: var(--search-close-icon-bg-color);
border-radius: 50%;
position: relative;
display: flex;
justify-content: center;
align-items: center;
box-sizing: content-box;
}
.close-icon:before,
.close-icon:after {
content: '';
position: absolute;
width: 7px;
height: 1px;
background-color: var(--search-close-icon-fg-color);
}
.close-icon:before {
transform: rotate(45deg);
}
.close-icon:after {
transform: rotate(-45deg);
}
.MSearchBoxActive #MSearchField {
color: var(--search-active-color);
}
.search-icon {
width: 20px;
height: 20px;
display: inline-block;
position: relative;
margin-left: 3px;
}
#MSearchSelectExt.search-icon {
width: 10px;
}
#MSearchSelectExt + input {
margin-left: 5px;
}
.search-icon::before, .search-icon::after {
content: '';
position: absolute;
border: 1.5px solid var(--search-foreground-color);
box-sizing: content-box;
}
.search-icon::before {
width: 6px;
height: 6px;
border-radius: 50%;
top: 7px;
left: 2px;
background: var(--search-background-color);
}
.search-icon::after {
border: 1px solid var(--search-foreground-color);
width: 0px;
height: 3px;
border-radius: 2px;
top: 15px;
left: 8px;
transform: rotate(-45deg);
transform-origin: top left;
}
.search-icon-dropdown {
content: '';
width: 0;
height: 0;
border-left: 3px solid transparent;
border-right: 3px solid transparent;
border-top: 3px solid var(--search-foreground-color);
top: 8px;
left: 15px;
transform: translateX(-50%);
position: absolute;
}
/*---------------- Search filter selection */
#MSearchSelectWindow {
display: none;
position: absolute;
left: 0; top: 0;
border: 1px solid var(--search-filter-border-color);
background-color: var(--search-filter-background-color);
backdrop-filter: var(--search-filter-backdrop-filter);
-webkit-backdrop-filter: var(--search-filter-backdrop-filter);
z-index: 10001;
padding-top: 4px;
padding-bottom: 4px;
border-radius: 4px;
}
.SelectItem {
font: 8pt var(--font-family-search);
padding-left: 2px;
padding-right: 12px;
border: 0px;
}
span.SelectionMark {
margin-right: 4px;
font-family: var(--font-family-monospace);
outline-style: none;
text-decoration: none;
}
a.SelectItem {
display: block;
outline-style: none;
color: var(--search-filter-foreground-color);
text-decoration: none;
padding-left: 6px;
padding-right: 12px;
}
a.SelectItem:focus,
a.SelectItem:active {
color: var(--search-filter-foreground-color);
outline-style: none;
text-decoration: none;
}
a.SelectItem:hover {
color: var(--search-filter-highlight-text-color);
background-color: var(--search-filter-highlight-bg-color);
outline-style: none;
text-decoration: none;
cursor: pointer;
display: block;
}
/*---------------- Search results window */
iframe#MSearchResults {
/*width: 60ex;*/
height: 15em;
}
@keyframes slideInSearchResults {
from {
opacity: 0;
transform: translate(0, 15px);
}
to {
opacity: 1;
transform: translate(0, 20px);
}
}
#MSearchResultsWindow {
display: none;
position: absolute;
left: auto;
right: 4px;
top: 0;
border: 1px solid var(--search-results-border-color);
background-color: var(--search-results-background-color);
backdrop-filter: var(--search-results-backdrop-filter);
-webkit-backdrop-filter: var(--search-results-backdrop-filter);
z-index:10000;
width: 300px;
height: 400px;
overflow: auto;
border-radius: 8px;
transform: translate(0, 20px);
animation: ease-out 280ms slideInSearchResults;
box-shadow: 0 2px 8px 0 rgba(0,0,0,.075);
}
/* ----------------------------------- */
#SRIndex {
clear:both;
}
.SREntry {
font-size: 10pt;
padding-left: 1ex;
}
.SRPage .SREntry {
font-size: 10pt;
padding: 2px 5px;
}
div.SRPage {
margin: 5px 2px;
}
.SRChildren {
padding-left: 3ex; padding-bottom: .5em
}
.SRPage .SRChildren {
display: none;
}
.SRSymbol {
font-weight: bold;
color: var(--search-results-foreground-color);
font-family: var(--font-family-search);
text-decoration: none;
outline: none;
}
a.SRScope {
display: block;
color: var(--search-results-foreground-color);
font-family: var(--font-family-search);
font-size: 8pt;
text-decoration: none;
outline: none;
}
a.SRSymbol:focus, a.SRSymbol:active,
a.SRScope:focus, a.SRScope:active {
text-decoration: underline;
}
span.SRScope {
padding-left: 4px;
font-family: var(--font-family-search);
}
.SRPage .SRStatus {
padding: 2px 5px;
font-size: 8pt;
font-style: italic;
font-family: var(--font-family-search);
}
.SRResult {
display: none;
}
div.searchresults {
margin-left: 10px;
margin-right: 10px;
}
#searchBoxPos1 dark-mode-toggle {
margin-top: 4px;
}
/*---------------- External search page results */
.pages b {
color: var(--nav-foreground-color);
padding: 5px 5px 3px 5px;
background-color: var(--nav-menu-active-bg);
border-radius: 4px;
}
.pages {
line-height: 17px;
margin-left: 4px;
text-decoration: none;
}
.hl {
font-weight: bold;
}
#searchresults {
margin-bottom: 20px;
}
.searchpages {
margin-top: 10px;
}
@@ -0,0 +1,708 @@
/*
@licstart The following is the entire license notice for the JavaScript code in this file.
The MIT License (MIT)
Copyright (C) 1997-2020 by Dimitri van Heesch
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.
@licend The above is the entire license notice for the JavaScript code in this file
*/
const SEARCH_COOKIE_NAME = ''+'search_grp';
const searchResults = new SearchResults();
/* A class handling everything associated with the search panel.
Parameters:
name - The name of the global variable that will be
storing this instance. Is needed to be able to set timeouts.
resultPath - path to use for external files
*/
function SearchBox(name, resultsPath, extension) {
if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
if (!extension || extension == "") { extension = ".html"; }
function getXPos(item) {
let x = 0;
if (item.offsetWidth) {
while (item && item!=document.body) {
x += item.offsetLeft;
item = item.offsetParent;
}
}
return x;
}
function getYPos(item) {
let y = 0;
if (item.offsetWidth) {
while (item && item!=document.body) {
y += item.offsetTop;
item = item.offsetParent;
}
}
return y;
}
// ---------- Instance variables
this.name = name;
this.resultsPath = resultsPath;
this.keyTimeout = 0;
this.keyTimeoutLength = 500;
this.closeSelectionTimeout = 300;
this.lastSearchValue = "";
this.lastResultsPage = "";
this.hideTimeout = 0;
this.searchIndex = 0;
this.searchActive = false;
this.extension = extension;
// ----------- DOM Elements
this.DOMSearchField = () => document.getElementById("MSearchField");
this.DOMSearchSelect = () => document.getElementById("MSearchSelect");
this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow");
this.DOMPopupSearchResults = () => document.getElementById("MSearchResults");
this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow");
this.DOMSearchClose = () => document.getElementById("MSearchClose");
this.DOMSearchBox = () => document.getElementById("MSearchBox");
// ------------ Event Handlers
// Called when focus is added or removed from the search field.
this.OnSearchFieldFocus = function(isActive) {
this.Activate(isActive);
}
this.OnSearchSelectShow = function() {
const searchSelectWindow = this.DOMSearchSelectWindow();
const searchField = this.DOMSearchSelect();
const left = getXPos(searchField);
const top = getYPos(searchField) + searchField.offsetHeight;
// show search selection popup
searchSelectWindow.style.display='block';
searchSelectWindow.style.left = left + 'px';
searchSelectWindow.style.top = top + 'px';
// stop selection hide timer
if (this.hideTimeout) {
clearTimeout(this.hideTimeout);
this.hideTimeout=0;
}
return false; // to avoid "image drag" default event
}
this.OnSearchSelectHide = function() {
this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this),
this.closeSelectionTimeout);
}
// Called when the content of the search field is changed.
this.OnSearchFieldChange = function(evt) {
if (this.keyTimeout) { // kill running timer
clearTimeout(this.keyTimeout);
this.keyTimeout = 0;
}
const e = evt ? evt : window.event; // for IE
if (e.keyCode==40 || e.keyCode==13) {
if (e.shiftKey==1) {
this.OnSearchSelectShow();
const win=this.DOMSearchSelectWindow();
for (let i=0;i<win.childNodes.length;i++) {
const child = win.childNodes[i]; // get span within a
if (child.className=='SelectItem') {
child.focus();
return;
}
}
return;
} else {
const elem = searchResults.NavNext(0);
if (elem) elem.focus();
}
} else if (e.keyCode==27) { // Escape out of the search field
e.stopPropagation();
this.DOMSearchField().blur();
this.DOMPopupSearchResultsWindow().style.display = 'none';
this.DOMSearchClose().style.display = 'none';
this.lastSearchValue = '';
this.Activate(false);
return;
}
// strip whitespaces
const searchValue = this.DOMSearchField().value.replace(/ +/g, "");
if (searchValue != this.lastSearchValue) { // search value has changed
if (searchValue != "") { // non-empty search
// set timer for search update
this.keyTimeout = setTimeout(this.Search.bind(this), this.keyTimeoutLength);
} else { // empty search field
this.DOMPopupSearchResultsWindow().style.display = 'none';
this.DOMSearchClose().style.display = 'none';
this.lastSearchValue = '';
}
}
}
this.SelectItemCount = function() {
let count=0;
const win=this.DOMSearchSelectWindow();
for (let i=0;i<win.childNodes.length;i++) {
const child = win.childNodes[i]; // get span within a
if (child.className=='SelectItem') {
count++;
}
}
return count;
}
this.GetSelectionIdByName = function(name) {
let j=0;
const win=this.DOMSearchSelectWindow();
for (let i=0;i<win.childNodes.length;i++) {
const child = win.childNodes[i];
if (child.className=='SelectItem') {
if (child.childNodes[1].nodeValue==name) {
return j;
}
j++;
}
}
return 0;
}
this.SelectItemSet = function(id) {
let j=0;
const win=this.DOMSearchSelectWindow();
for (let i=0;i<win.childNodes.length;i++) {
const child = win.childNodes[i]; // get span within a
if (child.className=='SelectItem') {
const node = child.firstChild;
if (j==id) {
node.innerHTML='&#8226;';
Cookie.writeSetting(SEARCH_COOKIE_NAME, child.childNodes[1].nodeValue, 0)
} else {
node.innerHTML='&#160;';
}
j++;
}
}
}
// Called when an search filter selection is made.
// set item with index id as the active item
this.OnSelectItem = function(id) {
this.searchIndex = id;
this.SelectItemSet(id);
const searchValue = this.DOMSearchField().value.replace(/ +/g, "");
if (searchValue!="" && this.searchActive) { // something was found -> do a search
this.Search();
}
}
this.OnSearchSelectKey = function(evt) {
const e = (evt) ? evt : window.event; // for IE
if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) { // Down
this.searchIndex++;
this.OnSelectItem(this.searchIndex);
} else if (e.keyCode==38 && this.searchIndex>0) { // Up
this.searchIndex--;
this.OnSelectItem(this.searchIndex);
} else if (e.keyCode==13 || e.keyCode==27) {
e.stopPropagation();
this.OnSelectItem(this.searchIndex);
this.CloseSelectionWindow();
this.DOMSearchField().focus();
}
return false;
}
// --------- Actions
// Closes the results window.
this.CloseResultsWindow = function() {
this.DOMPopupSearchResultsWindow().style.display = 'none';
this.DOMSearchClose().style.display = 'none';
this.Activate(false);
}
this.CloseSelectionWindow = function() {
this.DOMSearchSelectWindow().style.display = 'none';
}
// Performs a search.
this.Search = function() {
this.keyTimeout = 0;
// strip leading whitespace
const searchValue = this.DOMSearchField().value.replace(/^ +/, "");
const code = searchValue.toLowerCase().charCodeAt(0);
let idxChar = searchValue.substr(0, 1).toLowerCase();
if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair
idxChar = searchValue.substr(0, 2);
}
let jsFile;
let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
if (idx!=-1) {
const hexCode=idx.toString(16);
jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js';
}
const loadJS = function(url, impl, loc) {
const scriptTag = document.createElement('script');
scriptTag.src = url;
scriptTag.onload = impl;
scriptTag.onreadystatechange = impl;
loc.appendChild(scriptTag);
}
const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
const domSearchBox = this.DOMSearchBox();
const domPopupSearchResults = this.DOMPopupSearchResults();
const domSearchClose = this.DOMSearchClose();
const resultsPath = this.resultsPath;
const handleResults = function() {
document.getElementById("Loading").style.display="none";
if (typeof searchData !== 'undefined') {
createResults(resultsPath);
document.getElementById("NoMatches").style.display="none";
}
if (idx!=-1) {
searchResults.Search(searchValue);
} else { // no file with search results => force empty search results
searchResults.Search('====');
}
if (domPopupSearchResultsWindow.style.display!='block') {
domSearchClose.style.display = 'inline-block';
let left = getXPos(domSearchBox) + 150;
let top = getYPos(domSearchBox) + 20;
domPopupSearchResultsWindow.style.display = 'block';
left -= domPopupSearchResults.offsetWidth;
const maxWidth = document.body.clientWidth;
const maxHeight = document.body.clientHeight;
let width = 300;
if (left<10) left=10;
if (width+left+8>maxWidth) width=maxWidth-left-8;
let height = 400;
if (height+top+8>maxHeight) height=maxHeight-top-8;
domPopupSearchResultsWindow.style.top = top + 'px';
domPopupSearchResultsWindow.style.left = left + 'px';
domPopupSearchResultsWindow.style.width = width + 'px';
domPopupSearchResultsWindow.style.height = height + 'px';
}
}
if (jsFile) {
loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow());
} else {
handleResults();
}
this.lastSearchValue = searchValue;
}
// -------- Activation Functions
// Activates or deactivates the search panel, resetting things to
// their default values if necessary.
this.Activate = function(isActive) {
if (isActive || // open it
this.DOMPopupSearchResultsWindow().style.display == 'block'
) {
this.DOMSearchBox().className = 'MSearchBoxActive';
this.searchActive = true;
} else if (!isActive) { // directly remove the panel
this.DOMSearchBox().className = 'MSearchBoxInactive';
this.searchActive = false;
this.lastSearchValue = ''
this.lastResultsPage = '';
this.DOMSearchField().value = '';
}
}
}
// -----------------------------------------------------------------------
// The class that handles everything on the search results page.
function SearchResults() {
function convertToId(search) {
let result = '';
for (let i=0;i<search.length;i++) {
const c = search.charAt(i);
const cn = c.charCodeAt(0);
if (c.match(/[a-z0-9\u0080-\uFFFF]/)) {
result+=c;
} else if (cn<16) {
result+="_0"+cn.toString(16);
} else {
result+="_"+cn.toString(16);
}
}
return result;
}
// The number of matches from the last run of <Search()>.
this.lastMatchCount = 0;
this.lastKey = 0;
this.repeatOn = false;
// Toggles the visibility of the passed element ID.
this.FindChildElement = function(id) {
const parentElement = document.getElementById(id);
let element = parentElement.firstChild;
while (element && element!=parentElement) {
if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') {
return element;
}
if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) {
element = element.firstChild;
} else if (element.nextSibling) {
element = element.nextSibling;
} else {
do {
element = element.parentNode;
}
while (element && element!=parentElement && !element.nextSibling);
if (element && element!=parentElement) {
element = element.nextSibling;
}
}
}
}
this.Toggle = function(id) {
const element = this.FindChildElement(id);
if (element) {
if (element.style.display == 'block') {
element.style.display = 'none';
} else {
element.style.display = 'block';
}
}
}
// Searches for the passed string. If there is no parameter,
// it takes it from the URL query.
//
// Always returns true, since other documents may try to call it
// and that may or may not be possible.
this.Search = function(search) {
if (!search) { // get search word from URL
search = window.location.search;
search = search.substring(1); // Remove the leading '?'
search = unescape(search);
}
search = search.replace(/^ +/, ""); // strip leading spaces
search = search.replace(/ +$/, ""); // strip trailing spaces
search = search.toLowerCase();
search = convertToId(search);
const resultRows = document.getElementsByTagName("div");
let matches = 0;
let i = 0;
while (i < resultRows.length) {
const row = resultRows.item(i);
if (row.className == "SRResult") {
let rowMatchName = row.id.toLowerCase();
rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
if (search.length<=rowMatchName.length &&
rowMatchName.substr(0, search.length)==search) {
row.style.display = 'block';
matches++;
} else {
row.style.display = 'none';
}
}
i++;
}
document.getElementById("Searching").style.display='none';
if (matches == 0) { // no results
document.getElementById("NoMatches").style.display='block';
} else { // at least one result
document.getElementById("NoMatches").style.display='none';
}
this.lastMatchCount = matches;
return true;
}
// return the first item with index index or higher that is visible
this.NavNext = function(index) {
let focusItem;
for (;;) {
const focusName = 'Item'+index;
focusItem = document.getElementById(focusName);
if (focusItem && focusItem.parentNode.parentNode.style.display=='block') {
break;
} else if (!focusItem) { // last element
break;
}
focusItem=null;
index++;
}
return focusItem;
}
this.NavPrev = function(index) {
let focusItem;
for (;;) {
const focusName = 'Item'+index;
focusItem = document.getElementById(focusName);
if (focusItem && focusItem.parentNode.parentNode.style.display=='block') {
break;
} else if (!focusItem) { // last element
break;
}
focusItem=null;
index--;
}
return focusItem;
}
this.ProcessKeys = function(e) {
if (e.type == "keydown") {
this.repeatOn = false;
this.lastKey = e.keyCode;
} else if (e.type == "keypress") {
if (!this.repeatOn) {
if (this.lastKey) this.repeatOn = true;
return false; // ignore first keypress after keydown
}
} else if (e.type == "keyup") {
this.lastKey = 0;
this.repeatOn = false;
}
return this.lastKey!=0;
}
this.Nav = function(evt,itemIndex) {
const e = (evt) ? evt : window.event; // for IE
if (e.keyCode==13) return true;
if (!this.ProcessKeys(e)) return false;
if (this.lastKey==38) { // Up
const newIndex = itemIndex-1;
let focusItem = this.NavPrev(newIndex);
if (focusItem) {
let child = this.FindChildElement(focusItem.parentNode.parentNode.id);
if (child && child.style.display == 'block') { // children visible
let n=0;
let tmpElem;
for (;;) { // search for last child
tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
if (tmpElem) {
focusItem = tmpElem;
} else { // found it!
break;
}
n++;
}
}
}
if (focusItem) {
focusItem.focus();
} else { // return focus to search field
document.getElementById("MSearchField").focus();
}
} else if (this.lastKey==40) { // Down
const newIndex = itemIndex+1;
let focusItem;
const item = document.getElementById('Item'+itemIndex);
const elem = this.FindChildElement(item.parentNode.parentNode.id);
if (elem && elem.style.display == 'block') { // children visible
focusItem = document.getElementById('Item'+itemIndex+'_c0');
}
if (!focusItem) focusItem = this.NavNext(newIndex);
if (focusItem) focusItem.focus();
} else if (this.lastKey==39) { // Right
const item = document.getElementById('Item'+itemIndex);
const elem = this.FindChildElement(item.parentNode.parentNode.id);
if (elem) elem.style.display = 'block';
} else if (this.lastKey==37) { // Left
const item = document.getElementById('Item'+itemIndex);
const elem = this.FindChildElement(item.parentNode.parentNode.id);
if (elem) elem.style.display = 'none';
} else if (this.lastKey==27) { // Escape
e.stopPropagation();
searchBox.CloseResultsWindow();
document.getElementById("MSearchField").focus();
} else if (this.lastKey==13) { // Enter
return true;
}
return false;
}
this.NavChild = function(evt,itemIndex,childIndex) {
const e = (evt) ? evt : window.event; // for IE
if (e.keyCode==13) return true;
if (!this.ProcessKeys(e)) return false;
if (this.lastKey==38) { // Up
if (childIndex>0) {
const newIndex = childIndex-1;
document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
} else { // already at first child, jump to parent
document.getElementById('Item'+itemIndex).focus();
}
} else if (this.lastKey==40) { // Down
const newIndex = childIndex+1;
let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
if (!elem) { // last child, jump to parent next parent
elem = this.NavNext(itemIndex+1);
}
if (elem) {
elem.focus();
}
} else if (this.lastKey==27) { // Escape
e.stopPropagation();
searchBox.CloseResultsWindow();
document.getElementById("MSearchField").focus();
} else if (this.lastKey==13) { // Enter
return true;
}
return false;
}
}
function createResults(resultsPath) {
function setKeyActions(elem,action) {
elem.setAttribute('onkeydown',action);
elem.setAttribute('onkeypress',action);
elem.setAttribute('onkeyup',action);
}
function setClassAttr(elem,attr) {
elem.setAttribute('class',attr);
elem.setAttribute('className',attr);
}
const decodeHtml = (html) => {
const txt = document.createElement("textarea");
txt.innerHTML = html;
return txt.value;
};
const results = document.getElementById("SRResults");
results.innerHTML = '';
searchData.forEach((elem,index) => {
const id = elem[0];
const srResult = document.createElement('div');
srResult.setAttribute('id','SR_'+id);
setClassAttr(srResult,'SRResult');
const srEntry = document.createElement('div');
setClassAttr(srEntry,'SREntry');
const srLink = document.createElement('a');
srLink.setAttribute('id','Item'+index);
setKeyActions(srLink,'return searchResults.Nav(event,'+index+')');
setClassAttr(srLink,'SRSymbol');
srLink.innerHTML = decodeHtml(elem[1][0]);
srEntry.appendChild(srLink);
if (elem[1].length==2) { // single result
if (elem[1][1][0].startsWith('http://') || elem[1][1][0].startsWith('https://')) { // absolute path
srLink.setAttribute('href',elem[1][1][0]);
} else { // relative path
srLink.setAttribute('href',resultsPath+elem[1][1][0]);
}
srLink.setAttribute('onclick','searchBox.CloseResultsWindow()');
if (elem[1][1][1]) {
srLink.setAttribute('target','_parent');
} else {
srLink.setAttribute('target','_blank');
}
const srScope = document.createElement('span');
setClassAttr(srScope,'SRScope');
srScope.innerHTML = decodeHtml(elem[1][1][2]);
srEntry.appendChild(srScope);
} else { // multiple results
srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
const srChildren = document.createElement('div');
setClassAttr(srChildren,'SRChildren');
for (let c=0; c<elem[1].length-1; c++) {
const srChild = document.createElement('a');
srChild.setAttribute('id','Item'+index+'_c'+c);
setKeyActions(srChild,'return searchResults.NavChild(event,'+index+','+c+')');
setClassAttr(srChild,'SRScope');
if (elem[1][c+1][0].startsWith('http://') || elem[1][c+1][0].startsWith('https://')) { // absolute path
srChild.setAttribute('href',elem[1][c+1][0]);
} else { // relative path
srChild.setAttribute('href',resultsPath+elem[1][c+1][0]);
}
srChild.setAttribute('onclick','searchBox.CloseResultsWindow()');
if (elem[1][c+1][1]) {
srChild.setAttribute('target','_parent');
} else {
srChild.setAttribute('target','_blank');
}
srChild.innerHTML = decodeHtml(elem[1][c+1][2]);
srChildren.appendChild(srChild);
}
srEntry.appendChild(srChildren);
}
srResult.appendChild(srEntry);
results.appendChild(srResult);
});
}
function init_search() {
const results = document.getElementById("MSearchSelectWindow");
results.tabIndex=0;
for (let key in indexSectionLabels) {
const link = document.createElement('a');
link.setAttribute('class','SelectItem');
link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
link.href='javascript:void(0)';
link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
results.appendChild(link);
}
const input = document.getElementById("MSearchSelect");
const searchSelectWindow = document.getElementById("MSearchSelectWindow");
input.tabIndex=0;
input.addEventListener("keydown", function(event) {
if (event.keyCode==13 || event.keyCode==40) {
event.preventDefault();
if (searchSelectWindow.style.display == 'block') {
searchBox.CloseSelectionWindow();
} else {
searchBox.OnSearchSelectShow();
searchBox.DOMSearchSelectWindow().focus();
}
}
});
const name = Cookie.readSetting(SEARCH_COOKIE_NAME,0);
const id = searchBox.GetSelectionIdByName(name);
searchBox.OnSelectItem(id);
}
/* @license-end */
@@ -0,0 +1,18 @@
var indexSectionsWithContent =
{
0: "acdefghikloprstv",
1: "acdefghikloprstv"
};
var indexSectionNames =
{
0: "all",
1: "pages"
};
var indexSectionLabels =
{
0: "All",
1: "Pages"
};
File diff suppressed because one or more lines are too long
+425
View File
@@ -0,0 +1,425 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>KTX Tools Reference: toktx</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="ktx_logo_200.png"/></td>
<td id="projectalign">
<div id="projectname">KTX Tools Reference<span id="projectnumber">&#160;0.0.0</span>
</div>
<div id="projectbrief">Libraries and tools to create and read KTX image texture files.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.16.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('toktx.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div><div class="header">
<div class="headertitle"><div class="title">toktx </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Create a KTX file from JPEG, PNG or netpbm format files.</p>
<h1 class="doxsection"><a class="anchor" id="toktx_synopsis"></a>
SYNOPSIS</h1>
<p>toktx [options] <em>outfile</em> [<em>infile</em>.{jpg,png,pam,pgm,ppm} ...]</p>
<h1 class="doxsection"><a class="anchor" id="toktx_description"></a>
DESCRIPTION</h1>
<p>Create a Khronos format texture file (KTX) from a set of JPEG (.jpg), PNG (.png) or Netpbm format (.pam, .pgm, .ppm) images. It writes the destination ktx file to <em>outfile</em>, creating parent directories and appending ".ktx{,2}" if necessary. If <em>outfile</em> is '-' the output will be written to stdout.</p>
<p><b>toktx</b> reads each named <em>infile</em>. which must be in .jpg, .png, .pam, .ppm or .pgm format. <em>infiles</em> prefixed with '@' are read as text files listing actual file names to process with one file path per line. Paths must be absolute or relative to the current directory when <b>toktx</b> is run. If '@@' is used instead, paths must be absolute or relative to the location of the list file. File paths must be encoded in UTF-8.</p>
<p>The target texture type (number of components in the output texture) is chosen via <b>--target_type</b>. Swizzling of the components of the input file is specified with <b>--input_swizzle</b> and swizzzle metadata can be specified with <b>--swizzle</b>. Defaults, shown in the following table, are based on the components of the input file and whether the target texture format is uncompressed or block-compressed including the universal formats. Input components are arbitrarily labeled r, g, b &amp; a.</p>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone"></th><th class="markdownTableHeadCenter" colspan="4">Uncompressed Formats </th><th class="markdownTableHeadCenter" colspan="4">Block-compressed formats </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">Input components </td><td class="markdownTableBodyCenter">1 (greyscale) </td><td class="markdownTableBodyCenter">2 (greyscale alpha) </td><td class="markdownTableBodyCenter">3 </td><td class="markdownTableBodyCenter">4 </td><td class="markdownTableBodyCenter">1 </td><td class="markdownTableBodyCenter">2 </td><td class="markdownTableBodyCenter">3 </td><td class="markdownTableBodyCenter">4 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">Target type </td><td class="markdownTableBodyCenter">R </td><td class="markdownTableBodyCenter">RG </td><td class="markdownTableBodyCenter">RGB </td><td class="markdownTableBodyCenter">RGBA </td><td class="markdownTableBodyCenter">RGB </td><td class="markdownTableBodyCenter">RGBA </td><td class="markdownTableBodyCenter">RGB </td><td class="markdownTableBodyCenter">RGBA </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">Input swizzle </td><td class="markdownTableBodyCenter">- </td><td class="markdownTableBodyCenter">- </td><td class="markdownTableBodyCenter">- </td><td class="markdownTableBodyCenter">- </td><td class="markdownTableBodyCenter">rrr1 </td><td class="markdownTableBodyCenter">rrrg </td><td class="markdownTableBodyCenter">- </td><td class="markdownTableBodyCenter">- </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">Swizzle </td><td class="markdownTableBodyCenter">rrr1 </td><td class="markdownTableBodyCenter">rrrg </td><td class="markdownTableBodyCenter">- </td><td class="markdownTableBodyCenter">- </td><td class="markdownTableBodyCenter">- </td><td class="markdownTableBodyCenter">- </td><td class="markdownTableBodyCenter">- </td><td class="markdownTableBodyCenter">- </td></tr>
</table>
<p>As can be seen from the table one- and two-component inputs are treated as luminance{,-alpha} in accordance with the JPEG and PNG specifications. For consistency Netpbm inputs are handled the same way. Use of R &amp; RG types for uncompressed formats saves space but note that the sRGB versions of these formats are not widely supported so a warning will be issued prompting you to convert the input to linear.</p>
<p>The primaries, transfer function (OETF) and the texture's sRGB-ness is set based on the input file unless <b>--assign_oetf</b> linear or <b>--assign_oetf</b> srgb is specified. For .jpg files <b>toktx</b> always sets BT709/sRGB primaries and the sRGB OETF in the output file and creates sRGB format textures. Netpbm files always use BT.709/sRGB primaries and the BT.709 OETF. <b>toktx</b> tranforms these images to the sRGB OETF, sets BT709/sRGB primaries and the sRGB OETF in the output file and creates sRGB format textures.</p>
<p>For .png files the OETF is set as follows:</p>
<dl>
<dt>No color-info chunks or sRGB chunk present: </dt>
<dd>primaries are set to BT.709 and OETF to sRGB. </dd>
<dt>sRGB chunk present: </dt>
<dd>primaries are set to BT.709 and OETF to sRGB. gAMA and cHRM chunks are ignored. </dd>
<dt>iCCP chunk present: </dt>
<dd>General ICC profiles are not yet supported by toktx or the KTX2 format. In future these images may be transformed to linear or sRGB OETF as appropriate for the profile. sRGB chunk must not be present. </dd>
<dt>gAMA and/or cHRM chunks present without sRGB or iCCP: </dt>
<dd>If gAMA is &lt; 60000 the image is transformed to and the OETF is set to sRGB. otherwise the image is transformed to and the OETF is set to linear. The color primaries in cHRM are matched to one of the standard sets listed in the Khronos Data Format Specification (the KHR_DF_PRIMARIES values from khr_df.h) and the primaries field of the output file's DFD is set to the matched value. If no match is found the primaries field is set to UNSPECIFIED. </dd>
</dl>
<p>The following options are always available: </p><dl>
<dt>--2d </dt>
<dd>If the image height is 1, by default a KTX file for a 1D texture is created. With this option one for a 2D texture is created instead. </dd>
<dt>--automipmap </dt>
<dd>Causes the KTX file to be marked to request generation of a mipmap pyramid when the file is loaded. This option is mutually exclusive with <b>--genmipmap</b>, <b>--levels</b> and <b>--mipmap</b>. </dd>
<dt>--cubemap </dt>
<dd>KTX file is for a cubemap. At least 6 <em>infiles</em> must be provided, more if <b>--mipmap</b> or <b>--layers</b> is also specified. Provide the images in the order +X, -X, +Y, -Y, +Z, -Z where the arrangement is a left-handed coordinate system with +Y up. So if you're facing +Z, -X will be on your left and +X on your right. If <b>--layers</b> &gt; 1 is specified, provide the faces for layer 0 first then for layer 1, etc. Images must have an upper left origin so &ndash;lower_left_maps_to_s0t0 is ignored with this option. </dd>
<dt>--depth &lt;number&gt; </dt>
<dd>KTX file is for a 3D texture with a depth of <em>number</em> where <em>number</em> &gt; 0. Provide the file(s) for z=0 first then those for z=1, etc. It is an error to specify this together with <b>--layers</b> or <b>--cubemap</b>. </dd>
<dt>--genmipmap </dt>
<dd>Causes mipmaps to be generated for each input file. This option is mutually exclusive with <b>--automipmap</b> and <b>--mipmap</b>. When set, the following mipmap-generation related options become valid, otherwise they are ignored. <dl>
<dt>--filter &lt;name&gt; </dt>
<dd>Specifies the filter to use when generating the mipmaps. <em>name</em> is a string. The default is <em>lanczos4</em>. The following names are recognized: <em>box</em>, <em>tent</em>, <em>bell</em>, <em>b-spline</em>, <em>mitchell</em>, <em>lanczos3</em>, <em>lanczos4</em>, <em>lanczos6</em>, <em>lanczos12</em>, <em>blackman</em>, <em>kaiser</em>, <em>gaussian</em>, <em>catmullrom</em>, <em>quadratic_interp</em>, <em>quadratic_approx</em> and <em>quadratic_mix</em>. </dd>
<dt>--fscale &lt;floatVal&gt; </dt>
<dd>The filter scale to use. The default is 1.0. </dd>
<dt>--wmode &lt;mode&gt; </dt>
<dd>Specify how to sample pixels near the image boundaries. Values are <em>wrap</em>, <em>reflect</em> and <em>clamp</em>. The default is <em>clamp</em>. </dd>
</dl>
</dd>
<dt>--layers &lt;number&gt; </dt>
<dd>KTX file is for an array texture with <em>number</em> of layers where <em>number</em> &gt; 0. Provide the file(s) for layer 0 first then those for layer 1, etc. It is an error to specify this together with <b>--depth</b>. </dd>
<dt>--levels &lt;number&gt; </dt>
<dd>KTX file is for a mipmap pyramid with <em>number</em> of levels rather than a full pyramid. <em>number</em> must be &gt; 1 and &lt;= the maximum number of levels determined from the size of the base level image. Provide the base level image first, if using <b>--mipmap</b>. This option is mutually exclusive with <b>--automipmap</b>. </dd>
<dt>--mipmap </dt>
<dd>KTX file is for a mipmap pyramid with one <b>infile</b> being explicitly provided for each level. Provide the images in the order of layer then face or depth slice then level with the base-level image first then in order down to the 1x1 image or the level specified by <b>--levels</b>. <dl class="section note"><dt>Note</dt><dd>This ordering differs from that in the created texture as it is felt to be more user-friendly.</dd></dl>
This option is mutually exclusive with <b>--automipmap</b> and <b>--genmipmap</b>. </dd>
<dt>--nometadata </dt>
<dd>Do not write KTXorientation metadata into the output file. Metadata is written by default. Use of this option is not recommended. </dd>
<dt>--nowarn </dt>
<dd>Silence warnings which are issued when certain transformations are performed on input images. </dd>
<dt>--upper_left_maps_to_s0t0 </dt>
<dd>Map the logical upper left corner of the image to s0,t0. Although opposite to the OpenGL convention, this is the DEFAULT BEHAVIOUR. netpbm and PNG files have an upper left origin so this option does not flip the input images. When this option is in effect, toktx writes a KTXorientation value of S=r,T=d into the output file to inform loaders of the logical orientation. If an OpenGL {,ES} loader ignores the orientation value, the image will appear upside down. </dd>
<dt>--lower_left_maps_to_s0t0 </dt>
<dd>Map the logical lower left corner of the image to s0,t0. This causes the input netpbm and PNG images to be flipped vertically to a lower-left origin. When this option is in effect, toktx writes a KTXorientation value of S=r,T=u into the output file to inform loaders of the logical orientation. If a Vulkan loader ignores the orientation value, the image will appear upside down. This option is ignored with <b>--cubemap</b>. </dd>
<dt>--assign_oetf &lt;linear|srgb&gt; </dt>
<dd>Force the created texture to have the specified transfer function. If this is specified, implicit or explicit color space information from the input file(s) will be ignored and no color transformation will be performed. USE WITH CAUTION preferably only when you know the file format information is wrong. </dd>
<dt>--assign_primaries &lt;bt709|none|srgb&gt; </dt>
<dd>Force the created texture to have the specified primaries. If this is specified, implicit or explicit color space information from the input file(s) will be ignored and no color transformation will be performed. USE WITH CAUTION preferably only when you know the file format information is wrong. </dd>
<dt>--convert_oetf &lt;linear|srgb&gt; </dt>
<dd>Convert the input images to the specified transfer function, if the current transfer function is different. If both this and <b>--assign_oetf</b> are specified, conversion will be performed from the assigned transfer function to the transfer function specified by this option, if different. </dd>
<dt>--convert_primaries &lt;primaries&gt; </dt>
<dd>Convert the image images to the specified color primaries, if different from the color primaries of the input file(s) or the one specified by &ndash;assign-primaries. If both this and &ndash;assign-primaries are specified, conversion will be performed from the assigned primaries to the primaries specified by this option, if different. This option is not allowed to be specified when &ndash;assign-primaries is set to 'none'. Case insensitive. Possible options are: bt709 | srgb | bt601-ebu | bt601-smpte | bt2020 | ciexyz | aces | acescc | ntsc1953 | pal525 | displayp3 | adobergb </dd>
<dt>--linear </dt>
<dd>Deprecated. Use <b>--assign_oetf</b> linear. </dd>
<dt>--srgb </dt>
<dd>Deprecated. Use <b>--assign_oetf</b> srgb. </dd>
<dt>--resize &lt;width&gt;x&lt;height&gt; </dt>
<dd>Resize images to <em>width</em> X <em>height</em>. This should not be used with <b>--mipmap</b> as it would resize all the images to the same size. Resampler options can be set via <b>--filter</b> and <b>--fscale</b>. </dd>
<dt>--scale &lt;value&gt; </dt>
<dd>Scale images by <em>value</em> as they are read. Resampler options can be set via <b>--filter</b> and <b>--fscale</b>. . </dd>
<dt>--swizzle &lt;swizzle&gt; </dt>
<dd>Add swizzle metadata to the file being created. <em>swizzle</em> has the same syntax as the parameter for <b>--input_swizzle</b>. Not recommended for use with block-cmpressed textures, including Basis Universal formats, because something like <code>rabb</code> may yield drastically different error metrics if done after compression. </dd>
<dt>--target_type &lt;type&gt; </dt>
<dd>Specify the number of components in the created texture. <em>type</em> is one of the following strings: <code>R</code>, <code>RG</code>, <code>RGB</code> or <code>RGBA</code>. Excess input components will be dropped. Output components with no mapping from the input will be set to 0 or, if the alpha component, 1.0. </dd>
<dt>--t2 </dt>
<dd>Output in KTX2 format. Default is KTX. </dd>
</dl>
<dl>
<dt>--encode &lt;astc | etc1s | uastc&gt; </dt>
<dd>Compress the image data to ASTC, transcodable ETC1S / BasisLZ or high-quality transcodable UASTC format. Implies <b>--t2</b>. With each encoding option the following encoder specific options become valid, otherwise they are ignored. <dl>
<dt>astc: </dt>
<dd>Create a texture in high-quality ASTC format. </dd>
<dt>--astc_blk_d &lt;XxY | XxYxZ&gt; </dt>
<dd>Specify which block dimension to use for compressing the textures. e.g. <b>--astc_blk_d</b> 6x5 for 2D or <b>--astc_blk_d</b> 6x6x6 for 3D. 6x6 is the default for 2D. <table class="doxtable">
<tr>
<th>Supported 2D block dimensions are:</th></tr>
<tr>
<td>4x4</td><td>8.00 bpp</td></tr>
<tr>
<td>5x4</td><td>6.40 bpp</td></tr>
<tr>
<td>5x5</td><td>5.12 bpp</td></tr>
<tr>
<td>6x5</td><td>4.27 bpp</td></tr>
<tr>
<td>6x6</td><td>3.56 bpp</td></tr>
<tr>
<td>8x5</td><td>3.20 bpp</td></tr>
<tr>
<td>8x6</td><td>2.67 bpp</td></tr>
<tr>
<td>10x5</td><td>2.56 bpp</td></tr>
<tr>
<td>10x6</td><td>2.13 bpp</td></tr>
<tr>
<td>8x8</td><td>2.00 bpp</td></tr>
<tr>
<td>10x8</td><td>1.60 bpp</td></tr>
<tr>
<td>10x10</td><td>1.28 bpp</td></tr>
<tr>
<td>12x10</td><td>1.07 bpp</td></tr>
<tr>
<td>12x12</td><td>0.89 bpp</td></tr>
<tr>
<th>Supported 3D block dimensions are:</th></tr>
<tr>
<td>3x3x3</td><td>4.74 bpp</td></tr>
<tr>
<td>4x3x3</td><td>3.56 bpp</td></tr>
<tr>
<td>4x4x3</td><td>2.67 bpp</td></tr>
<tr>
<td>4x4x4</td><td>2.00 bpp</td></tr>
<tr>
<td>5x4x4</td><td>1.60 bpp</td></tr>
<tr>
<td>5x5x4</td><td>1.28 bpp</td></tr>
<tr>
<td>5x5x5</td><td>1.02 bpp</td></tr>
<tr>
<td>6x5x5</td><td>0.85 bpp</td></tr>
<tr>
<td>6x6x5</td><td>0.71 bpp</td></tr>
<tr>
<td>6x6x6</td><td>0.59 bpp</td></tr>
</table>
</dd>
<dt>--astc_mode &lt;ldr | hdr&gt; </dt>
<dd>Specify which encoding mode to use. LDR is the default unless the input image is 16-bit in which case the default is HDR. </dd>
<dt>--astc_quality &lt;level&gt; </dt>
<dd>The quality level configures the quality-performance tradeoff for the compressor; more complete searches of the search space improve image quality at the expense of compression time. Default is 'medium'. The quality level can be set between fastest (0) and exhaustive (100) via the following fixed quality presets: <table class="doxtable">
<tr>
<th>Level </th><th>Quality </th></tr>
<tr>
<td>fastest </td><td>(equivalent to quality = 0) </td></tr>
<tr>
<td>fast </td><td>(equivalent to quality = 10) </td></tr>
<tr>
<td>medium </td><td>(equivalent to quality = 60) </td></tr>
<tr>
<td>thorough </td><td>(equivalent to quality = 98) </td></tr>
<tr>
<td>exhaustive </td><td>(equivalent to quality = 100) </td></tr>
</table>
</dd>
<dt>--astc_perceptual </dt>
<dd>The codec should optimize for perceptual error, instead of direct RMS error. This aims to improve perceived image quality, but typically lowers the measured PSNR score. Perceptual methods are currently only available for normal maps and RGB color data. </dd>
</dl>
<dl>
<dt>etc1s: </dt>
<dd>Supercompress the image data with ETC1S / BasisLZ. RED images will become RGB with RED in each component. RG images will have R in the RGB part and G in the alpha part of the compressed texture. When set, the following BasisLZ-related options become valid, otherwise they are ignored. </dd>
<dt>--no_multithreading </dt>
<dd>Disable multithreading. Deprecated. For backward compatibility. Use <b>--threads</b> 1 instead. </dd>
<dt>--clevel &lt;level&gt; </dt>
<dd>ETC1S / BasisLZ compression level, an encoding speed vs. quality tradeoff. Range is [0,5], default is 1. Higher values are slower but give higher quality. </dd>
<dt>--qlevel &lt;level&gt; </dt>
<dd><p class="startdd">ETC1S / BasisLZ quality level. Range is [1,255]. Lower gives better compression/lower quality/faster. Higher gives less compression/higher quality/slower. <b>--qlevel</b> automatically determines values for <b>--max_endpoints</b>, <b>--max-selectors</b>, <b>--endpoint_rdo_threshold</b> and <b>--selector_rdo_threshold</b> for the target quality level. Setting these options overrides the values determined by -qlevel which defaults to 128 if neither it nor both of <b>--max_endpoints</b> and <b>--max_selectors</b> have been set.</p>
<p class="interdd">Note that both of <b>--max_endpoints</b> and <b>--max_selectors</b> must be set for them to have any effect. If all three options are set, a warning will be issued that <b>--qlevel</b> will be ignored.</p>
<p class="enddd">Note also that <b>--qlevel</b> will only determine values for <b>--endpoint_rdo_threshold</b> and <b>--selector_rdo_threshold</b> when its value exceeds 128, otherwise their defaults will be used. </p>
</dd>
<dt>--max_endpoints &lt;arg&gt; </dt>
<dd>Manually set the maximum number of color endpoint clusters. Range is [1,16128]. Default is 0, unset. </dd>
<dt>--endpoint_rdo_threshold &lt;arg&gt; </dt>
<dd>Set endpoint RDO quality threshold. The default is 1.25. Lower is higher quality but less quality per output bit (try [1.0,3.0]). This will override the value chosen by <b>--qlevel</b>. </dd>
<dt>--max_selectors &lt;arg&gt; </dt>
<dd>Manually set the maximum number of color selector clusters from [1,16128]. Default is 0, unset. </dd>
<dt>--selector_rdo_threshold &lt;arg&gt; </dt>
<dd>Set selector RDO quality threshold. The default is 1.25. Lower is higher quality but less quality per output bit (try [1.0,3.0]). This will override the value chosen by <b>--qlevel</b>. </dd>
<dt>--no_endpoint_rdo </dt>
<dd>Disable endpoint rate distortion optimizations. Slightly faster, less noisy output, but lower quality per output bit. Default is to do endpoint RDO. </dd>
<dt>--no_selector_rdo </dt>
<dd>Disable selector rate distortion optimizations. Slightly faster, less noisy output, but lower quality per output bit. Default is to do selector RDO. </dd>
</dl>
<dl>
<dt>uastc: </dt>
<dd>Create a texture in high-quality transcodable UASTC format. </dd>
<dt>--uastc_quality &lt;level&gt; </dt>
<dd><p class="startdd">This optional parameter selects a speed vs quality tradeoff as shown in the following table:</p>
<table class="doxtable">
<tr>
<th>Level</th><th>Speed</th><th>Quality</th></tr>
<tr>
<td>0 </td><td>Fastest </td><td>43.45dB</td></tr>
<tr>
<td>1 </td><td>Faster </td><td>46.49dB</td></tr>
<tr>
<td>2 </td><td>Default </td><td>47.47dB</td></tr>
<tr>
<td>3 </td><td>Slower </td><td>48.01dB</td></tr>
<tr>
<td>4 </td><td>Very slow </td><td>48.24dB</td></tr>
</table>
<p class="enddd">You are strongly encouraged to also specify <b>--zcmp</b> to losslessly compress the UASTC data. This and any LZ-style compression can be made more effective by conditioning the UASTC texture data using the Rate Distortion Optimization (RDO) post-process stage. When uastc encoding is set the following options become available for controlling RDO: </p>
</dd>
<dt>--uastc_rdo_l [&lt;lambda&gt;] </dt>
<dd><p class="startdd">Enable UASTC RDO post-processing and optionally set UASTC RDO quality scalar (lambda) to <em>lambda</em>. Lower values yield higher quality/larger LZ compressed files, higher values yield lower quality/smaller LZ compressed files. A good range to try is [.25,10]. For normal maps a good range is [.25,.75]. The full range is [.001,10.0]. Default is 1.0.</p>
<p class="enddd">Note that previous versions used the <b>--uastc_rdo_q</b> option which was removed because the RDO algorithm changed. </p>
</dd>
<dt>--uastc_rdo_d &lt;dictsize&gt; </dt>
<dd>Set UASTC RDO dictionary size in bytes. Default is 4096. Lower values=faster, but give less compression. Range is [64,65536]. </dd>
<dt>--uastc_rdo_b &lt;scale&gt; </dt>
<dd>Set UASTC RDO max smooth block error scale. Range is [1.0,300.0]. Default is 10.0, 1.0 is disabled. Larger values suppress more artifacts (and allocate more bits) on smooth blocks. </dd>
<dt>--uastc_rdo_s &lt;deviation&gt; </dt>
<dd>Set UASTC RDO max smooth block standard deviation. Range is [.01,65536.0]. Default is 18.0. Larger values expand the range of blocks considered smooth. </dd>
<dt>--uastc_rdo_f </dt>
<dd>Do not favor simpler UASTC modes in RDO mode. </dd>
<dt>--uastc_rdo_m </dt>
<dd>Disable RDO multithreading (slightly higher compression, deterministic). </dd>
</dl>
</dd>
<dt>--input_swizzle &lt;swizzle&gt; </dt>
<dd>Swizzle the input components according to <em>swizzle</em> which is an alhpanumeric sequence matching the regular expression <code>^</code>[rgba01]{4}$. </dd>
<dt>--normal_mode </dt>
<dd><p class="startdd">Only valid for linear textures with two or more components. If the input texture has three or four linear components it is assumed to be a three component linear normal map storing unit length normals as (R=X, G=Y, B=Z). A fourth component will be ignored. The map will be converted to a two component X+Y normal map stored as (RGB=X, A=Y) prior to encoding. If unsure that your normals are unit length, use <b>--normalize</b>. If the input has 2 linear components it is assumed to be an X+Y map of unit normals.</p>
<p class="interdd">The Z component can be recovered programmatically in shader code by using the equations: </p><pre>
nml.xy = texture(...).ga; // Load in [0,1]
nml.xy = nml.xy * 2.0 - 1.0; // Unpack to [-1,1]
nml.z = sqrt(1 - dot(nml.xy, nml.xy)); // Compute Z
</pre><p> For ASTC encoding, '<b>--encode</b> astc', encoder parameters are tuned for better quality on normal maps. For ETC1S encoding, <b>'--encode</b> etc1s', RDO is disabled (no selector RDO, no endpoint RDO) to provide better quality.</p>
<p class="enddd">In <em>toktx</em> you can prevent conversion of the normal map to two components by specifying '<b>--input_swizzle</b> rgb1'. </p>
</dd>
<dt>--normalize </dt>
<dd>Normalize input normals to have a unit length. Only valid for linear textures with 2 or more components. For 2-component inputs 2D unit normals are calculated. Do not use these 2D unit normals to generate X+Y normals for &ndash;normal_mode. For 4-component inputs a 3D unit normal is calculated. 1.0 is used for the value of the 4th component. </dd>
<dt>--no_sse </dt>
<dd>Forbid use of the SSE instruction set. Ignored if CPU does not support SSE. Only the Basis Universal compressor uses SSE. </dd>
<dt>--bcmp </dt>
<dd>Deprecated. Use '<b>--encode</b> etc1s' instead. </dd>
<dt>--uastc [&lt;level&gt;] </dt>
<dd>Deprecated. Use '<b>--encode</b> uastc' instead. </dd>
<dt>--zcmp [&lt;compressionLevel&gt;] </dt>
<dd>Supercompress the data with Zstandard. Implies <b>--t2</b>. Can be used with data in any format except ETC1S / BasisLZ. Most effective with RDO-conditioned UASTC or uncompressed formats. The optional compressionLevel range is 1 - 22 and the default is 3. Lower values=faster but give less compression. Values above 20 should be used with caution as they require more memory. </dd>
<dt>--threads &lt;count&gt; </dt>
<dd>Explicitly set the number of threads to use during compression. By default, ETC1S / BasisLZ and ASTC compression will use the number of threads reported by thread::hardware_concurrency or 1 if value returned is 0. </dd>
<dt>--verbose </dt>
<dd>Print encoder/compressor activity status to stdout. Currently only the astc, etc1s and uastc encoders emit status. </dd>
</dl>
<dl>
<dt>-h, --help </dt>
<dd>Print this usage message and exit. </dd>
<dt>-v, --version </dt>
<dd>Print the version number of this program and exit. </dd>
</dl>
<pre class="fragment"> In case of ambiguity, such as when the last option is one with an optional
parameter, separate options from file names with " -- ".
Any specified ASTC, ETC1S / BasisLZ, UASTC and supercompression options are
recorded in the metadata item @c KTXwriterScParams in the output file.
Options can also be set in the environment variable TOKTX_OPTIONS.
TOKTX_OPTIONS is parsed first. If conflicting options appear in
TOKTX_OPTIONS or the command line, the last one seen wins. However if both
@b --automipmap and @b --mipmap are seen, it is always flagged as an error.
You can, for example, set TOKTX_OPTIONS=--lower_left_maps_to_s0t0 to change
the default mapping of the logical image origin to match the GL convention.
</pre> <h1 class="doxsection"><a class="anchor" id="toktx_exitstatus"></a>
EXIT STATUS</h1>
<p><b>toktx</b> exits 0 on success, 1 on command line errors and 2 on functional errors.</p>
<h1 class="doxsection"><a class="anchor" id="toktx_history"></a>
HISTORY</h1>
<dl class="section user"><dt>Version 4.0 (using new version numbering system)</dt><dd><ul>
<li>Add KTX version 2 support including Basis Universal encoding.</li>
<li>Add .png and .jpg readers.</li>
<li>Transform NetPBM input files to sRGB OETF.</li>
<li>Add mipmap generation.</li>
<li>Remove legacy items.</li>
</ul>
</dd></dl>
<dl class="section user"><dt>Version 1.3</dt><dd><ul>
<li>Switch to ktxTexture API.</li>
<li>Add &ndash;levels option.</li>
<li>Add &ndash;2d option.</li>
</ul>
</dd></dl>
<dl class="section user"><dt>Version 1.2</dt><dd><ul>
<li>Remove &ndash;sized; always create sized format.</li>
<li>Write metadata by default.</li>
<li>Bug fixes.</li>
</ul>
</dd></dl>
<dl class="section user"><dt>Version 1.1</dt><dd><ul>
<li>Moved &ndash;alpha and &ndash;luminance to legacy.</li>
</ul>
</dd></dl>
<h1 class="doxsection"><a class="anchor" id="toktx_author"></a>
AUTHOR</h1>
<p>Mark Callow, github.com/MarkCallow </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on <span class="timestamp"></span> for KTX Tools Reference by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.16.1 </li>
</ul>
</div>
</body>
</html>