Add ktx
This commit is contained in:
@@ -0,0 +1,267 @@
|
||||
<!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>libktx Reference: vkload.cpp</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">libktx Reference<span id="projectnumber"> 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('vkload_8cpp-example.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">vkload.cpp</div></div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<p>This shows how to create and load a Vulkan image using the Vulkan texture image loading functions.</p>
|
||||
<div class="fragment"><div class="line"><span class="comment">// Copyright 2018-2020 The Khronos Group Inc.</span></div>
|
||||
<div class="line"><span class="comment">// SPDX-License-Identifier: Apache-2.0</span></div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><span class="preprocessor">#include <vulkan/vulkan.h></span></div>
|
||||
<div class="line"><span class="preprocessor">#include <ktxvulkan.h></span></div>
|
||||
<div class="line"><span class="comment">// Use c++ to keep the example short. Not required.</span></div>
|
||||
<div class="line"><span class="preprocessor">#include <vulkan/vulkan.hpp></span></div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><span class="keyword">class </span>Texture {</div>
|
||||
<div class="line"> <span class="keyword">public</span>:</div>
|
||||
<div class="line"> Texture(<span class="keyword">const</span> std::string ktxfile);</div>
|
||||
<div class="line"> ~Texture();</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> <span class="keyword">protected</span>:</div>
|
||||
<div class="line"> <a id="_a0" name="_a0"></a><a class="code hl_class" href="structktxVulkanTexture.html">ktxVulkanTexture</a> texture;</div>
|
||||
<div class="line"> vk::PhysicalDevice gpu;</div>
|
||||
<div class="line"> vk::Device device;</div>
|
||||
<div class="line"> vk::Queue queue;</div>
|
||||
<div class="line"> vk::CommandPool commandPool;</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> cleanup();</div>
|
||||
<div class="line"> prepareSamplerAndView();</div>
|
||||
<div class="line">};</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">Texture::Texture(<span class="keyword">const</span> std::string ktxfile)</div>
|
||||
<div class="line">{</div>
|
||||
<div class="line"> <a id="_a1" name="_a1"></a><a class="code hl_class" href="structktxVulkanDeviceInfo.html">ktxVulkanDeviceInfo</a> kvdi;</div>
|
||||
<div class="line"> <a id="_a2" name="_a2"></a><a class="code hl_class" href="structktxTexture.html">ktxTexture</a>* kTexture;</div>
|
||||
<div class="line"> <a id="_a3" name="_a3"></a><a class="code hl_define" href="ktx_8h.html#ad2efa40e38ebae48371375db92d34eaa">KTX_error_code</a> ktxresult;</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> createVulkanInstance();</div>
|
||||
<div class="line"> findVulkanGpu(); <span class="comment">// Find a suitable physical device</span></div>
|
||||
<div class="line"> createVulkanSurface();</div>
|
||||
<div class="line"> createVulkanDevice();</div>
|
||||
<div class="line"> prepareVulkanSwapchain();</div>
|
||||
<div class="line"> <span class="comment">/*</span></div>
|
||||
<div class="line"><span class="comment"> .</span></div>
|
||||
<div class="line"><span class="comment"> .</span></div>
|
||||
<div class="line"><span class="comment"> .</span></div>
|
||||
<div class="line"><span class="comment"> */</span></div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> <span class="comment">// This structure is used to pass the Vulkan device information to the loader</span></div>
|
||||
<div class="line"> <span class="comment">// with the expectation that app's will typically load many textures.</span></div>
|
||||
<div class="line"> ktxVulkanDeviceInfo_Construct(&kvdi, gpu, device, queue, commandPool, <span class="keyword">nullptr</span>);</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> ktxresult = ktxTexture_CreateFromNamedFile(</div>
|
||||
<div class="line"> (getAssetPath() + ktxfile).c_str(),</div>
|
||||
<div class="line"> KTX_TEXTURE_CREATE_NO_FLAGS,</div>
|
||||
<div class="line"> &kTexture);</div>
|
||||
<div class="line"> <span class="keywordflow">if</span> (<a id="_a4" name="_a4"></a><a class="code hl_enumvalue" href="ktx_8h.html#a7780d97ec4de6aa30c4726fb71e3116cafdb7a07b23399df43e1ecf161963cf98">KTX_SUCCESS</a> != ktxresult) {</div>
|
||||
<div class="line"> std::stringstream message;</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> message << <span class="stringliteral">"Creation of ktxTexture from \""</span> << getAssetPath()</div>
|
||||
<div class="line"> << ktxfile << <span class="stringliteral">"\" failed: "</span> << <a id="a5" name="a5"></a><a class="code hl_function" href="ktx_8h.html#a829eac221b33617c15a1b5a898a0771a">ktxErrorString</a>(ktxresult);</div>
|
||||
<div class="line"> <span class="keywordflow">throw</span> std::runtime_error(message.str());</div>
|
||||
<div class="line"> }</div>
|
||||
<div class="line"> ktxresult = ktxTexture_VkUploadEx(kTexture, &kvdi, &texture,</div>
|
||||
<div class="line"> VK_IMAGE_TILING_OPTIMAL,</div>
|
||||
<div class="line"> VK_IMAGE_USAGE_SAMPLED_BIT,</div>
|
||||
<div class="line"> VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);</div>
|
||||
<div class="line"> <span class="keywordflow">if</span> (<a class="code hl_enumvalue" href="ktx_8h.html#a7780d97ec4de6aa30c4726fb71e3116cafdb7a07b23399df43e1ecf161963cf98">KTX_SUCCESS</a> != ktxresult) {</div>
|
||||
<div class="line"> std::stringstream message;</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> message << <span class="stringliteral">"ktxTexture_VkUpload failed: "</span> << <a class="code hl_function" href="ktx_8h.html#a829eac221b33617c15a1b5a898a0771a">ktxErrorString</a>(ktxresult);</div>
|
||||
<div class="line"> <span class="keywordflow">throw</span> std::runtime_error(message.str());</div>
|
||||
<div class="line"> }</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> <span class="keywordtype">char</span>* pValue;</div>
|
||||
<div class="line"> uint32_t valueLen;</div>
|
||||
<div class="line"> <span class="keywordflow">if</span> (<a class="code hl_enumvalue" href="ktx_8h.html#a7780d97ec4de6aa30c4726fb71e3116cafdb7a07b23399df43e1ecf161963cf98">KTX_SUCCESS</a> == ktxHashTable_FindValue(&kTexture-><a id="a6" name="a6"></a><a class="code hl_variable" href="structktxTexture.html#a57141753cd2eb0967c9c071d853c5d32">kvDataHead</a>,</div>
|
||||
<div class="line"> <a id="_a7" name="_a7"></a><a class="code hl_define" href="ktx_8h.html#a7eebf850576083e740cf1f418eed39a0">KTX_ORIENTATION_KEY</a>,</div>
|
||||
<div class="line"> &valueLen, (<span class="keywordtype">void</span>**)&pValue))</div>
|
||||
<div class="line"> {</div>
|
||||
<div class="line"> <span class="keywordtype">char</span> s, t;</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> <span class="keywordflow">if</span> (sscanf(pValue, <a id="_a8" name="_a8"></a><a class="code hl_define" href="ktx_8h.html#ad235113b0090e64ad23a0cf7097e1b7a">KTX_ORIENTATION2_FMT</a>, &s, &t) == 2) {</div>
|
||||
<div class="line"> <span class="keywordflow">if</span> (s == <span class="charliteral">'l'</span>) sign_s = -1;</div>
|
||||
<div class="line"> <span class="keywordflow">if</span> (t == <span class="charliteral">'u'</span>) sign_t = -1;</div>
|
||||
<div class="line"> }</div>
|
||||
<div class="line"> }</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> <a id="a9" name="a9"></a><a class="code hl_define" href="ktx_8h.html#a0becd37ccf729eed8723b969bb93df3d">ktxTexture_Destroy</a>(kTexture);</div>
|
||||
<div class="line"> ktxVulkanDeviceInfo_destruct(&kvdi);</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> <span class="keywordflow">try</span> {</div>
|
||||
<div class="line"> prepareSamplerAndView(); <span class="comment">// See below for implementation.</span></div>
|
||||
<div class="line"> <span class="comment">// Setup a layout with, e.g., a binding for a combined image-sampler.</span></div>
|
||||
<div class="line"> setupDescriptorSetLayout();</div>
|
||||
<div class="line"> <span class="comment">// Create a descriptor set and update it with the sampler and image view handles.</span></div>
|
||||
<div class="line"> setupDescriptorSet();</div>
|
||||
<div class="line"> preparePipelines();</div>
|
||||
<div class="line"> setupDescriptorPool();</div>
|
||||
<div class="line"> setupDescriptorSet();</div>
|
||||
<div class="line"> buildCommandBuffers();</div>
|
||||
<div class="line"> } <span class="keywordflow">catch</span> (std::exception&) {</div>
|
||||
<div class="line"> cleanup();</div>
|
||||
<div class="line"> <span class="keywordflow">throw</span>;</div>
|
||||
<div class="line"> }</div>
|
||||
<div class="line">}</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">Texture::~Texture()</div>
|
||||
<div class="line">{</div>
|
||||
<div class="line"> cleanup();</div>
|
||||
<div class="line">}</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">Texture::cleanup()</div>
|
||||
<div class="line">{</div>
|
||||
<div class="line"> destroyCommandBuffers();</div>
|
||||
<div class="line"> destroySampler();</div>
|
||||
<div class="line"> destroyImageview();</div>
|
||||
<div class="line"> ktxVulkanTexture_destruct(&texture, device, <span class="keyword">nullptr</span>);</div>
|
||||
<div class="line"> <span class="comment">/*</span></div>
|
||||
<div class="line"><span class="comment"> .</span></div>
|
||||
<div class="line"><span class="comment"> .</span></div>
|
||||
<div class="line"><span class="comment"> .</span></div>
|
||||
<div class="line"><span class="comment"> */</span></div>
|
||||
<div class="line">}</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><span class="keywordtype">void</span></div>
|
||||
<div class="line">Texture::prepareSamplerAndView()</div>
|
||||
<div class="line">{</div>
|
||||
<div class="line"> <span class="comment">// Create sampler.</span></div>
|
||||
<div class="line"> vk::SamplerCreateInfo samplerInfo;</div>
|
||||
<div class="line"> <span class="comment">// Set the non-default values</span></div>
|
||||
<div class="line"> samplerInfo.magFilter = vk::Filter::eLinear;</div>
|
||||
<div class="line"> samplerInfo.minFilter = vk::Filter::eLinear;</div>
|
||||
<div class="line"> samplerInfo.mipmapMode = vk::SamplerMipmapMode::eLinear;</div>
|
||||
<div class="line"> samplerInfo.maxLod = texture.levelCount;</div>
|
||||
<div class="line"> samplerInfo.anisotropyEnable = <span class="keyword">false</span>;</div>
|
||||
<div class="line"> samplerInfo.maxAnisotropy = 1.0;</div>
|
||||
<div class="line"> samplerInfo.borderColor = vk::BorderColor::eFloatOpaqueWhite;</div>
|
||||
<div class="line"> sampler = vkctx.device.createSampler(samplerInfo);</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> <span class="comment">// Create image view.</span></div>
|
||||
<div class="line"> <span class="comment">// Textures are not directly accessed by the shaders and are abstracted</span></div>
|
||||
<div class="line"> <span class="comment">// by image views containing additional information and sub resource</span></div>
|
||||
<div class="line"> <span class="comment">// ranges.</span></div>
|
||||
<div class="line"> vk::ImageViewCreateInfo viewInfo;</div>
|
||||
<div class="line"> <span class="comment">// Set the non-default values.</span></div>
|
||||
<div class="line"> viewInfo.image = texture.image;</div>
|
||||
<div class="line"> viewInfo.format = <span class="keyword">static_cast<</span>vk::Format<span class="keyword">></span>(texture.imageFormat);</div>
|
||||
<div class="line"> viewInfo.viewType = <span class="keyword">static_cast<</span>vk::ImageViewType<span class="keyword">></span>(texture.viewType);</div>
|
||||
<div class="line"> viewInfo.subresourceRange.aspectMask = vk::ImageAspectFlagBits::eColor;</div>
|
||||
<div class="line"> viewInfo.subresourceRange.layerCount = texture.layerCount;</div>
|
||||
<div class="line"> viewInfo.subresourceRange.levelCount = texture.levelCount;</div>
|
||||
<div class="line"> imageView = vkctx.device.createImageView(viewInfo);</div>
|
||||
<div class="line">}</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><span class="comment">/* -*- tab-width: 4; -*- */</span></div>
|
||||
<div class="line"><span class="comment">/* vi: set sw=2 ts=4 expandtab: */</span></div>
|
||||
<div class="ttc" id="aktx_8h_html_a0becd37ccf729eed8723b969bb93df3d"><div class="ttname"><a href="ktx_8h.html#a0becd37ccf729eed8723b969bb93df3d">ktxTexture_Destroy</a></div><div class="ttdeci">#define ktxTexture_Destroy(This)</div><div class="ttdoc">Helper for calling the Destroy virtual method of a ktxTexture.</div><div class="ttdef"><b>Definition</b> ktx.h:533</div></div>
|
||||
<div class="ttc" id="aktx_8h_html_a7780d97ec4de6aa30c4726fb71e3116cafdb7a07b23399df43e1ecf161963cf98"><div class="ttname"><a href="ktx_8h.html#a7780d97ec4de6aa30c4726fb71e3116cafdb7a07b23399df43e1ecf161963cf98">KTX_SUCCESS</a></div><div class="ttdeci">@ KTX_SUCCESS</div><div class="ttdef"><b>Definition</b> ktx.h:170</div></div>
|
||||
<div class="ttc" id="aktx_8h_html_a7eebf850576083e740cf1f418eed39a0"><div class="ttname"><a href="ktx_8h.html#a7eebf850576083e740cf1f418eed39a0">KTX_ORIENTATION_KEY</a></div><div class="ttdeci">#define KTX_ORIENTATION_KEY</div><div class="ttdoc">Key string for standard orientation metadata.</div><div class="ttdef"><b>Definition</b> ktx.h:124</div></div>
|
||||
<div class="ttc" id="aktx_8h_html_a829eac221b33617c15a1b5a898a0771a"><div class="ttname"><a href="ktx_8h.html#a829eac221b33617c15a1b5a898a0771a">ktxErrorString</a></div><div class="ttdeci">KTX_API const char *KTX_APIENTRY ktxErrorString(KTX_error_code error)</div><div class="ttdoc">Return a string corresponding to a KTX error code.</div><div class="ttdef"><b>Definition</b> strings.c:59</div></div>
|
||||
<div class="ttc" id="aktx_8h_html_ad235113b0090e64ad23a0cf7097e1b7a"><div class="ttname"><a href="ktx_8h.html#ad235113b0090e64ad23a0cf7097e1b7a">KTX_ORIENTATION2_FMT</a></div><div class="ttdeci">#define KTX_ORIENTATION2_FMT</div><div class="ttdoc">Standard KTX 1 format for 2D orientation value.</div><div class="ttdef"><b>Definition</b> ktx.h:149</div></div>
|
||||
<div class="ttc" id="aktx_8h_html_ad2efa40e38ebae48371375db92d34eaa"><div class="ttname"><a href="ktx_8h.html#ad2efa40e38ebae48371375db92d34eaa">KTX_error_code</a></div><div class="ttdeci">#define KTX_error_code</div><div class="ttdoc">For backward compatibility.</div><div class="ttdef"><b>Definition</b> ktx.h:198</div></div>
|
||||
<div class="ttc" id="astructktxTexture_html"><div class="ttname"><a href="structktxTexture.html">ktxTexture</a></div><div class="ttdoc">Base class representing a texture.</div><div class="ttdef"><b>Definition</b> ktx.h:287</div></div>
|
||||
<div class="ttc" id="astructktxTexture_html_a57141753cd2eb0967c9c071d853c5d32"><div class="ttname"><a href="structktxTexture.html#a57141753cd2eb0967c9c071d853c5d32">ktxTexture::kvDataHead</a></div><div class="ttdeci">ktxHashList kvDataHead</div><div class="ttdoc">Head of the hash list of metadata.</div><div class="ttdef"><b>Definition</b> ktx.h:288</div></div>
|
||||
<div class="ttc" id="astructktxVulkanDeviceInfo_html"><div class="ttname"><a href="structktxVulkanDeviceInfo.html">ktxVulkanDeviceInfo</a></div><div class="ttdoc">Struct for passing information about the Vulkan device on which to create images to the texture image...</div><div class="ttdef"><b>Definition</b> ktxvulkan.h:188</div></div>
|
||||
<div class="ttc" id="astructktxVulkanTexture_html"><div class="ttname"><a href="structktxVulkanTexture.html">ktxVulkanTexture</a></div><div class="ttdoc">Struct for returning information about the Vulkan texture image created by the ktxTexture_VkUpload* f...</div><div class="ttdef"><b>Definition</b> ktxvulkan.h:108</div></div>
|
||||
</div><!-- fragment --> </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 libktx 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>
|
||||
Reference in New Issue
Block a user