Newer
Older
ForwardPlusRenderer / Docs / html / classfpr_1_1_buffer.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
		<meta http-equiv="X-UA-Compatible" content="IE=9"/>
		<meta name="generator" content="Doxygen 1.9.5"/>
		<meta name="viewport" content="width=device-width, initial-scale=1"/>
		<title>Final Year Project: fpr::Buffer Class 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>
		<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.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" />
		<link href="custom_dark_theme.css" rel="stylesheet" type="text/css"/>
<link href="custom.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 style="height: 56px;">
						<td id="projectalign" style="padding-left: 0.5em;">
							<div id="projectname">Final Year Project
							</div>
						</td>
					</tr>
				</tbody>
			</table>
		</div>
		<!-- end header part --><!-- Generated by Doxygen 1.9.5 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</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">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('classfpr_1_1_buffer.html',''); initResizable(); });
/* @license-end */
</script>
<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="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="classfpr_1_1_buffer-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">fpr::Buffer Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Holds some essential information for data transfer between the CPU and GPU. Data transfer between GPU and CPU in Vulkan is not trivial and several important decisions need to be made for data transfer.  
 <a href="classfpr_1_1_buffer.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="_buffer_8h_source.html">Buffer.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a1c647d7d61e69cafad4257f580d2c41f"><td class="memItemLeft" align="right" valign="top"><a id="a1c647d7d61e69cafad4257f580d2c41f" name="a1c647d7d61e69cafad4257f580d2c41f"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>Buffer</b> (<a class="el" href="classfpr_1_1_buffer.html">Buffer</a> &amp;other)=delete</td></tr>
<tr class="memdesc:a1c647d7d61e69cafad4257f580d2c41f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor for a buffer is deleted. A buffer must never be copied directly like this, as they contain unique handles for Vulkan objects. <br /></td></tr>
<tr class="separator:a1c647d7d61e69cafad4257f580d2c41f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a237defca3f18e839629432e922d87632"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#a237defca3f18e839629432e922d87632">Buffer</a> (vk::DeviceSize buffer_size, vk::BufferUsageFlags usage_flags, vk::MemoryPropertyFlags mem_flags)</td></tr>
<tr class="memdesc:a237defca3f18e839629432e922d87632"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parameterised constructor for a buffer.  <a href="classfpr_1_1_buffer.html#a237defca3f18e839629432e922d87632">More...</a><br /></td></tr>
<tr class="separator:a237defca3f18e839629432e922d87632"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abff1e9a70a69394da6823463870bab77"><td class="memItemLeft" align="right" valign="top">vk::DeviceSize&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#abff1e9a70a69394da6823463870bab77">GetSize</a> ()</td></tr>
<tr class="memdesc:abff1e9a70a69394da6823463870bab77"><td class="mdescLeft">&#160;</td><td class="mdescRight">Getter for the buffer size private member.  <a href="classfpr_1_1_buffer.html#abff1e9a70a69394da6823463870bab77">More...</a><br /></td></tr>
<tr class="separator:abff1e9a70a69394da6823463870bab77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0d421e1b5a9db2c825e081ebbc18b2c"><td class="memItemLeft" align="right" valign="top">vk::Buffer &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#af0d421e1b5a9db2c825e081ebbc18b2c">GetBuffer</a> ()</td></tr>
<tr class="memdesc:af0d421e1b5a9db2c825e081ebbc18b2c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Getter for the VkBuffer private member.  <a href="classfpr_1_1_buffer.html#af0d421e1b5a9db2c825e081ebbc18b2c">More...</a><br /></td></tr>
<tr class="separator:af0d421e1b5a9db2c825e081ebbc18b2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a829fed31e6ac9706893bd0043537af0e"><td class="memItemLeft" align="right" valign="top"><a id="a829fed31e6ac9706893bd0043537af0e" name="a829fed31e6ac9706893bd0043537af0e"></a>
<a class="el" href="classfpr_1_1_buffer.html">Buffer</a>&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classfpr_1_1_buffer.html">Buffer</a> &amp;other)=delete</td></tr>
<tr class="memdesc:a829fed31e6ac9706893bd0043537af0e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Like the copy constructor, the copy assigment operator is also deleted due to identical reasoning. <br /></td></tr>
<tr class="separator:a829fed31e6ac9706893bd0043537af0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a607111a387447a1990aab2a4aa8ca21e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#a607111a387447a1990aab2a4aa8ca21e">Transfer</a> (<a class="el" href="classfpr_1_1_buffer.html">Buffer</a> *other)</td></tr>
<tr class="memdesc:a607111a387447a1990aab2a4aa8ca21e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Transfer this buffer into another through the use of an intermediary staging buffer. This should be used instead in almost all cases where one would wish to copy a buffer.  <a href="classfpr_1_1_buffer.html#a607111a387447a1990aab2a4aa8ca21e">More...</a><br /></td></tr>
<tr class="separator:a607111a387447a1990aab2a4aa8ca21e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a776a0f23c5eb01c4247273656fae73cb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#a776a0f23c5eb01c4247273656fae73cb">Update</a> (const void *new_data)</td></tr>
<tr class="memdesc:a776a0f23c5eb01c4247273656fae73cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Does not validate the given data for size. Simply copies the new data and overwrites the currently mapped data.  <a href="classfpr_1_1_buffer.html#a776a0f23c5eb01c4247273656fae73cb">More...</a><br /></td></tr>
<tr class="separator:a776a0f23c5eb01c4247273656fae73cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a107b4e093c5456eb07cd1d86a9746da2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#a107b4e093c5456eb07cd1d86a9746da2">Flush</a> ()</td></tr>
<tr class="memdesc:a107b4e093c5456eb07cd1d86a9746da2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flushes the mapped memory. Used when the buffer is updated and released to ensure the buffer is in a valid state between synchronisation.  <a href="classfpr_1_1_buffer.html#a107b4e093c5456eb07cd1d86a9746da2">More...</a><br /></td></tr>
<tr class="separator:a107b4e093c5456eb07cd1d86a9746da2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0b808db2e96d58c31da5b86138f00ce"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#ab0b808db2e96d58c31da5b86138f00ce">GetMapped</a> ()</td></tr>
<tr class="memdesc:ab0b808db2e96d58c31da5b86138f00ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Getter for private member holding the raw data of the buffer.  <a href="classfpr_1_1_buffer.html#ab0b808db2e96d58c31da5b86138f00ce">More...</a><br /></td></tr>
<tr class="separator:ab0b808db2e96d58c31da5b86138f00ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a52305babb43406486a66eb5a541df908"><td class="memItemLeft" align="right" valign="top">vk::DeviceSize&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#a52305babb43406486a66eb5a541df908">m_buffer_size</a></td></tr>
<tr class="memdesc:a52305babb43406486a66eb5a541df908"><td class="mdescLeft">&#160;</td><td class="mdescRight">The size of the buffer in bytes.  <a href="classfpr_1_1_buffer.html#a52305babb43406486a66eb5a541df908">More...</a><br /></td></tr>
<tr class="separator:a52305babb43406486a66eb5a541df908"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15cc0c1d535e6b8517b98119dbee81e8"><td class="memItemLeft" align="right" valign="top">vk::UniqueBuffer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#a15cc0c1d535e6b8517b98119dbee81e8">m_buffer</a></td></tr>
<tr class="memdesc:a15cc0c1d535e6b8517b98119dbee81e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">RAII handle for a VkBuffer.  <a href="classfpr_1_1_buffer.html#a15cc0c1d535e6b8517b98119dbee81e8">More...</a><br /></td></tr>
<tr class="separator:a15cc0c1d535e6b8517b98119dbee81e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa6b4c531a7c12ec99c8211eb27ae36c0"><td class="memItemLeft" align="right" valign="top">vk::UniqueDeviceMemory&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#aa6b4c531a7c12ec99c8211eb27ae36c0">m_memory</a></td></tr>
<tr class="memdesc:aa6b4c531a7c12ec99c8211eb27ae36c0"><td class="mdescLeft">&#160;</td><td class="mdescRight">RAII handle for VkDeviceMemory.  <a href="classfpr_1_1_buffer.html#aa6b4c531a7c12ec99c8211eb27ae36c0">More...</a><br /></td></tr>
<tr class="separator:aa6b4c531a7c12ec99c8211eb27ae36c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad77ef431dbb9d3ba1ab3dea71e93535b"><td class="memItemLeft" align="right" valign="top">vk::DescriptorBufferInfo&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#ad77ef431dbb9d3ba1ab3dea71e93535b">m_buffer_info</a></td></tr>
<tr class="memdesc:ad77ef431dbb9d3ba1ab3dea71e93535b"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classfpr_1_1_buffer.html" title="Holds some essential information for data transfer between the CPU and GPU. Data transfer between GPU...">Buffer</a> information used for descriptor sets. Primarily concerns shaders.  <a href="classfpr_1_1_buffer.html#ad77ef431dbb9d3ba1ab3dea71e93535b">More...</a><br /></td></tr>
<tr class="separator:ad77ef431dbb9d3ba1ab3dea71e93535b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0948d795cd3a84c7290bbbe1db071bce"><td class="memItemLeft" align="right" valign="top">vk::DeviceSize&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#a0948d795cd3a84c7290bbbe1db071bce">m_alignment</a> = 0</td></tr>
<tr class="memdesc:a0948d795cd3a84c7290bbbe1db071bce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Alignment of buffer data. Mostly irrelevant, though important when _aligned_malloc() is used.  <a href="classfpr_1_1_buffer.html#a0948d795cd3a84c7290bbbe1db071bce">More...</a><br /></td></tr>
<tr class="separator:a0948d795cd3a84c7290bbbe1db071bce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a597dc9657c76e2ac517895f7e1a79bcf"><td class="memItemLeft" align="right" valign="top">vk::BufferUsageFlags&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#a597dc9657c76e2ac517895f7e1a79bcf">m_usage</a></td></tr>
<tr class="memdesc:a597dc9657c76e2ac517895f7e1a79bcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Denotes what the buffer will be used for, i.e index buffer or vertex buffer and so on.  <a href="classfpr_1_1_buffer.html#a597dc9657c76e2ac517895f7e1a79bcf">More...</a><br /></td></tr>
<tr class="separator:a597dc9657c76e2ac517895f7e1a79bcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a049dd5d7e633bcfdbb7bebc795c0e6c3"><td class="memItemLeft" align="right" valign="top">vk::MemoryPropertyFlags&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#a049dd5d7e633bcfdbb7bebc795c0e6c3">m_memory_flags</a></td></tr>
<tr class="memdesc:a049dd5d7e633bcfdbb7bebc795c0e6c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">A buffer's held data may not be always available to the CPU intentionally to increase GPU access speed, amongst other performance concerns. See Vulkan documentation for further details.  <a href="classfpr_1_1_buffer.html#a049dd5d7e633bcfdbb7bebc795c0e6c3">More...</a><br /></td></tr>
<tr class="separator:a049dd5d7e633bcfdbb7bebc795c0e6c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6665690308d2cb41ff90c68ca2232a9c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classfpr_1_1_buffer.html#a6665690308d2cb41ff90c68ca2232a9c">mapped_data</a> = nullptr</td></tr>
<tr class="memdesc:a6665690308d2cb41ff90c68ca2232a9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Raw pointer to the data held on the GPU. In this engine, most data is persistently mapped.  <a href="classfpr_1_1_buffer.html#a6665690308d2cb41ff90c68ca2232a9c">More...</a><br /></td></tr>
<tr class="separator:a6665690308d2cb41ff90c68ca2232a9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Holds some essential information for data transfer between the CPU and GPU. Data transfer between GPU and CPU in Vulkan is not trivial and several important decisions need to be made for data transfer. </p>
<p >Different use cases for buffers range from index buffers to buffers that hold culled light indices. Thus, it is evident that their access requirements differ, which is what is handled through this class. </p>

<p class="definition">Definition at line <a class="el" href="_buffer_8h_source.html#l00013">13</a> of file <a class="el" href="_buffer_8h_source.html">Buffer.h</a>.</p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a237defca3f18e839629432e922d87632" name="a237defca3f18e839629432e922d87632"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a237defca3f18e839629432e922d87632">&#9670;&#160;</a></span>Buffer()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">fpr::Buffer::Buffer </td>
          <td>(</td>
          <td class="paramtype">vk::DeviceSize&#160;</td>
          <td class="paramname"><em>buffer_size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vk::BufferUsageFlags&#160;</td>
          <td class="paramname"><em>usage_flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">vk::MemoryPropertyFlags&#160;</td>
          <td class="paramname"><em>mem_flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Parameterised constructor for a buffer. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">buffer_size</td><td>Size of the buffer in bytes. </td></tr>
    <tr><td class="paramname">usage_flags</td><td>Purpose of the buffer, passed as a mask. A buffer can be a transfer buffer, index buffer and so on. Refer to Vulkan docs.</td></tr>
    <tr><td class="paramname">mem_flags</td><td>Memory properties of the buffer being used. Passed as a mask. Denotes whether a buffer is meant to be readily available to the CPU amongst other options. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="_buffer_8cpp_source.html#l00008">8</a> of file <a class="el" href="_buffer_8cpp_source.html">Buffer.cpp</a>.</p>

</div>
</div>
<a id="aac5554324b69931b65251dc382a81775" name="aac5554324b69931b65251dc382a81775"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac5554324b69931b65251dc382a81775">&#9670;&#160;</a></span>~Buffer()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">fpr::Buffer::~Buffer </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_buffer_8cpp_source.html#l00044">44</a> of file <a class="el" href="_buffer_8cpp_source.html">Buffer.cpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a107b4e093c5456eb07cd1d86a9746da2" name="a107b4e093c5456eb07cd1d86a9746da2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a107b4e093c5456eb07cd1d86a9746da2">&#9670;&#160;</a></span>Flush()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void fpr::Buffer::Flush </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Flushes the mapped memory. Used when the buffer is updated and released to ensure the buffer is in a valid state between synchronisation. </p>

<p class="definition">Definition at line <a class="el" href="_buffer_8cpp_source.html#l00079">79</a> of file <a class="el" href="_buffer_8cpp_source.html">Buffer.cpp</a>.</p>

</div>
</div>
<a id="af0d421e1b5a9db2c825e081ebbc18b2c" name="af0d421e1b5a9db2c825e081ebbc18b2c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af0d421e1b5a9db2c825e081ebbc18b2c">&#9670;&#160;</a></span>GetBuffer()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">vk::Buffer &amp; fpr::Buffer::GetBuffer </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Getter for the VkBuffer private member. </p>
<dl class="section return"><dt>Returns</dt><dd>Reference to the VkBuffer held in the unique handle. </dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classfpr_1_1_buffer.html#a15cc0c1d535e6b8517b98119dbee81e8" title="RAII handle for a VkBuffer.">m_buffer</a> </dd></dl>

<p class="definition">Definition at line <a class="el" href="_buffer_8cpp_source.html#l00056">56</a> of file <a class="el" href="_buffer_8cpp_source.html">Buffer.cpp</a>.</p>

</div>
</div>
<a id="ab0b808db2e96d58c31da5b86138f00ce" name="ab0b808db2e96d58c31da5b86138f00ce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab0b808db2e96d58c31da5b86138f00ce">&#9670;&#160;</a></span>GetMapped()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void * fpr::Buffer::GetMapped </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Getter for private member holding the raw data of the buffer. </p>
<dl class="section see"><dt>See also</dt><dd>m_mapped</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>raw untyped pointer to the mapped data. Use with caution. </dd></dl>

<p class="definition">Definition at line <a class="el" href="_buffer_8cpp_source.html#l00090">90</a> of file <a class="el" href="_buffer_8cpp_source.html">Buffer.cpp</a>.</p>

</div>
</div>
<a id="abff1e9a70a69394da6823463870bab77" name="abff1e9a70a69394da6823463870bab77"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abff1e9a70a69394da6823463870bab77">&#9670;&#160;</a></span>GetSize()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">vk::DeviceSize fpr::Buffer::GetSize </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Getter for the buffer size private member. </p>
<dl class="section return"><dt>Returns</dt><dd>Size in bytes of buffer. </dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classfpr_1_1_buffer.html#a52305babb43406486a66eb5a541df908" title="The size of the buffer in bytes.">m_buffer_size</a> </dd></dl>

<p class="definition">Definition at line <a class="el" href="_buffer_8cpp_source.html#l00051">51</a> of file <a class="el" href="_buffer_8cpp_source.html">Buffer.cpp</a>.</p>

</div>
</div>
<a id="a607111a387447a1990aab2a4aa8ca21e" name="a607111a387447a1990aab2a4aa8ca21e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a607111a387447a1990aab2a4aa8ca21e">&#9670;&#160;</a></span>Transfer()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void fpr::Buffer::Transfer </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classfpr_1_1_buffer.html">Buffer</a> *&#160;</td>
          <td class="paramname"><em>other</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Transfer this buffer into another through the use of an intermediary staging buffer. This should be used instead in almost all cases where one would wish to copy a buffer. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">other</td><td>The destination buffer that will hold the data of the current data. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="_buffer_8cpp_source.html#l00061">61</a> of file <a class="el" href="_buffer_8cpp_source.html">Buffer.cpp</a>.</p>

</div>
</div>
<a id="a776a0f23c5eb01c4247273656fae73cb" name="a776a0f23c5eb01c4247273656fae73cb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a776a0f23c5eb01c4247273656fae73cb">&#9670;&#160;</a></span>Update()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void fpr::Buffer::Update </td>
          <td>(</td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>new_data</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Does not validate the given data for size. Simply copies the new data and overwrites the currently mapped data. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">new_data</td><td>The data that will overwrite the currently mapped data held by the buffer. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="_buffer_8cpp_source.html#l00071">71</a> of file <a class="el" href="_buffer_8cpp_source.html">Buffer.cpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a0948d795cd3a84c7290bbbe1db071bce" name="a0948d795cd3a84c7290bbbe1db071bce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0948d795cd3a84c7290bbbe1db071bce">&#9670;&#160;</a></span>m_alignment</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">vk::DeviceSize fpr::Buffer::m_alignment = 0</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Alignment of buffer data. Mostly irrelevant, though important when _aligned_malloc() is used. </p>

<p class="definition">Definition at line <a class="el" href="_buffer_8h_source.html#l00037">37</a> of file <a class="el" href="_buffer_8h_source.html">Buffer.h</a>.</p>

</div>
</div>
<a id="a15cc0c1d535e6b8517b98119dbee81e8" name="a15cc0c1d535e6b8517b98119dbee81e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15cc0c1d535e6b8517b98119dbee81e8">&#9670;&#160;</a></span>m_buffer</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">vk::UniqueBuffer fpr::Buffer::m_buffer</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>RAII handle for a VkBuffer. </p>

<p class="definition">Definition at line <a class="el" href="_buffer_8h_source.html#l00023">23</a> of file <a class="el" href="_buffer_8h_source.html">Buffer.h</a>.</p>

</div>
</div>
<a id="ad77ef431dbb9d3ba1ab3dea71e93535b" name="ad77ef431dbb9d3ba1ab3dea71e93535b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad77ef431dbb9d3ba1ab3dea71e93535b">&#9670;&#160;</a></span>m_buffer_info</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">vk::DescriptorBufferInfo fpr::Buffer::m_buffer_info</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p><a class="el" href="classfpr_1_1_buffer.html" title="Holds some essential information for data transfer between the CPU and GPU. Data transfer between GPU...">Buffer</a> information used for descriptor sets. Primarily concerns shaders. </p>

<p class="definition">Definition at line <a class="el" href="_buffer_8h_source.html#l00033">33</a> of file <a class="el" href="_buffer_8h_source.html">Buffer.h</a>.</p>

</div>
</div>
<a id="a52305babb43406486a66eb5a541df908" name="a52305babb43406486a66eb5a541df908"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a52305babb43406486a66eb5a541df908">&#9670;&#160;</a></span>m_buffer_size</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">vk::DeviceSize fpr::Buffer::m_buffer_size</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The size of the buffer in bytes. </p>

<p class="definition">Definition at line <a class="el" href="_buffer_8h_source.html#l00018">18</a> of file <a class="el" href="_buffer_8h_source.html">Buffer.h</a>.</p>

</div>
</div>
<a id="aa6b4c531a7c12ec99c8211eb27ae36c0" name="aa6b4c531a7c12ec99c8211eb27ae36c0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa6b4c531a7c12ec99c8211eb27ae36c0">&#9670;&#160;</a></span>m_memory</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">vk::UniqueDeviceMemory fpr::Buffer::m_memory</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>RAII handle for VkDeviceMemory. </p>

<p class="definition">Definition at line <a class="el" href="_buffer_8h_source.html#l00028">28</a> of file <a class="el" href="_buffer_8h_source.html">Buffer.h</a>.</p>

</div>
</div>
<a id="a049dd5d7e633bcfdbb7bebc795c0e6c3" name="a049dd5d7e633bcfdbb7bebc795c0e6c3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a049dd5d7e633bcfdbb7bebc795c0e6c3">&#9670;&#160;</a></span>m_memory_flags</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">vk::MemoryPropertyFlags fpr::Buffer::m_memory_flags</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>A buffer's held data may not be always available to the CPU intentionally to increase GPU access speed, amongst other performance concerns. See Vulkan documentation for further details. </p>

<p class="definition">Definition at line <a class="el" href="_buffer_8h_source.html#l00046">46</a> of file <a class="el" href="_buffer_8h_source.html">Buffer.h</a>.</p>

</div>
</div>
<a id="a597dc9657c76e2ac517895f7e1a79bcf" name="a597dc9657c76e2ac517895f7e1a79bcf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a597dc9657c76e2ac517895f7e1a79bcf">&#9670;&#160;</a></span>m_usage</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">vk::BufferUsageFlags fpr::Buffer::m_usage</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Denotes what the buffer will be used for, i.e index buffer or vertex buffer and so on. </p>

<p class="definition">Definition at line <a class="el" href="_buffer_8h_source.html#l00041">41</a> of file <a class="el" href="_buffer_8h_source.html">Buffer.h</a>.</p>

</div>
</div>
<a id="a6665690308d2cb41ff90c68ca2232a9c" name="a6665690308d2cb41ff90c68ca2232a9c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6665690308d2cb41ff90c68ca2232a9c">&#9670;&#160;</a></span>mapped_data</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void* fpr::Buffer::mapped_data = nullptr</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Raw pointer to the data held on the GPU. In this engine, most data is persistently mapped. </p>

<p class="definition">Definition at line <a class="el" href="_buffer_8h_source.html#l00050">50</a> of file <a class="el" href="_buffer_8h_source.html">Buffer.h</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>D:/Users/mbuzelis/source/repos/ForwardPlusRenderer/include/Buffer/<a class="el" href="_buffer_8h_source.html">Buffer.h</a></li>
<li>D:/Users/mbuzelis/source/repos/ForwardPlusRenderer/src/Buffer/<a class="el" href="_buffer_8cpp_source.html">Buffer.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
		<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
			<ul>
				<li class="navelem"><b>fpr</b></li><li class="navelem"><a class="el" href="classfpr_1_1_buffer.html">Buffer</a></li>
				<li class="footer">
					Generated on Mon Oct 3 2022 13:44:05 for Final Year Project by <a href="http://www.doxygen.org/index.html">
					<img class="footer" src="doxygen.png" alt="doxygen"
                     onerror="this.onerror=null;this.src='doxygen.svg';"/></a> 1.9.5.
					Dark theme by <a href="http://majerle.eu" target="_new">Tilen Majerle</a>. All rights reserved.
				</li>
			</ul>
		</div>
		<script src="custom.js"></script>
	</body>
</html>