MCPcopy Create free account
hub / github.com/ValveSoftware/openvr / RenderFrame

Method RenderFrame

samples/hellovr_vulkan/hellovr_vulkan_main.cpp:1695–1776  ·  view source on GitHub ↗

----------------------------------------------------------------------------- Purpose: -----------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

1693// Purpose:
1694//-----------------------------------------------------------------------------
1695void CMainApplication::RenderFrame()
1696{
1697 if ( m_pHMD )
1698 {
1699 m_currentCommandBuffer = GetCommandBuffer();
1700
1701 // Start the command buffer
1702 VkCommandBufferBeginInfo commandBufferBeginInfo = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO };
1703 commandBufferBeginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
1704 vkBeginCommandBuffer( m_currentCommandBuffer.m_pCommandBuffer, &commandBufferBeginInfo );
1705
1706 UpdateControllerAxes();
1707 RenderStereoTargets();
1708 RenderCompanionWindow();
1709
1710 // End the command buffer
1711 vkEndCommandBuffer( m_currentCommandBuffer.m_pCommandBuffer );
1712
1713 // Submit the command buffer
1714 VkPipelineStageFlags nWaitDstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
1715 VkSubmitInfo submitInfo = { VK_STRUCTURE_TYPE_SUBMIT_INFO };
1716 submitInfo.commandBufferCount = 1;
1717 submitInfo.pCommandBuffers = &m_currentCommandBuffer.m_pCommandBuffer;
1718 submitInfo.waitSemaphoreCount = 1;
1719 submitInfo.pWaitSemaphores = &m_pSwapchainSemaphores[ m_nFrameIndex ];
1720 submitInfo.pWaitDstStageMask = &nWaitDstStageMask;
1721 vkQueueSubmit( m_pQueue, 1, &submitInfo, m_currentCommandBuffer.m_pFence );
1722
1723 // Add the command buffer back for later recycling
1724 m_commandBuffers.push_front( m_currentCommandBuffer );
1725
1726 m_currentCommandBuffer.m_pCommandBuffer = VK_NULL_HANDLE;
1727 m_currentCommandBuffer.m_pFence = VK_NULL_HANDLE;
1728
1729 // Submit to SteamVR
1730 vr::VRTextureBounds_t bounds;
1731 bounds.uMin = 0.0f;
1732 bounds.uMax = 1.0f;
1733 bounds.vMin = 0.0f;
1734 bounds.vMax = 1.0f;
1735
1736 vr::VRVulkanTextureData_t vulkanData;
1737 vulkanData.m_nImage = ( uint64_t ) m_leftEyeDesc.m_pImage;
1738 vulkanData.m_pDevice = ( VkDevice_T * ) m_pDevice;
1739 vulkanData.m_pPhysicalDevice = ( VkPhysicalDevice_T * ) m_pPhysicalDevice;
1740 vulkanData.m_pInstance = ( VkInstance_T *) m_pInstance;
1741 vulkanData.m_pQueue = ( VkQueue_T * ) m_pQueue;
1742 vulkanData.m_nQueueFamilyIndex = m_nQueueFamilyIndex;
1743
1744 vulkanData.m_nWidth = m_nRenderWidth;
1745 vulkanData.m_nHeight = m_nRenderHeight;
1746 vulkanData.m_nFormat = VK_FORMAT_R8G8B8A8_SRGB;
1747 vulkanData.m_nSampleCount = m_nMSAASampleCount;
1748
1749 vr::Texture_t texture = { &vulkanData, vr::TextureType_Vulkan, vr::ColorSpace_Auto };
1750 vr::VRCompositor()->Submit( vr::Eye_Left, &texture, &bounds );
1751
1752 vulkanData.m_nImage = ( uint64_t ) m_rightEyeDesc.m_pImage;

Callers

nothing calls this directly

Calls 3

sizeMethod · 0.80
dprintfFunction · 0.70
SubmitMethod · 0.45

Tested by

no test coverage detected