Fixed typos
This commit is contained in:
parent
e1ec3b6c78
commit
3abe588157
22 changed files with 32 additions and 32 deletions
|
|
@ -373,7 +373,7 @@ Adds ray traced shadows casting using the new Nvidia RTX extensions to a more co
|
||||||
|
|
||||||
#### [10 - Ray traced reflections with VK_NV_ray_tracing](examples/nv_ray_tracing_reflections)
|
#### [10 - Ray traced reflections with VK_NV_ray_tracing](examples/nv_ray_tracing_reflections)
|
||||||
|
|
||||||
Renders a complex scene with reflective surfaces using using the new Nvidia RTX extensions. Shows how to do recursion inside of the ray tracing shaders for implementing real time reflections.
|
Renders a complex scene with reflective surfaces using the new Nvidia RTX extensions. Shows how to do recursion inside of the ray tracing shaders for implementing real time reflections.
|
||||||
|
|
||||||
### <a name="Misc"></a> Misc
|
### <a name="Misc"></a> Misc
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -505,7 +505,7 @@ public:
|
||||||
setLayoutBindings = {
|
setLayoutBindings = {
|
||||||
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0 : Vertex shader uniform buffer
|
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), // Binding 0 : Vertex shader uniform buffer
|
||||||
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1), // Binding 1 : Fragment shader image sampler
|
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 1), // Binding 1 : Fragment shader image sampler
|
||||||
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 2), // Binding 2 : Framgnet shader image sampler
|
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT, 2), // Binding 2 : Fragment shader image sampler
|
||||||
};
|
};
|
||||||
|
|
||||||
descriptorSetLayoutCreateInfo = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings.data(), setLayoutBindings.size());
|
descriptorSetLayoutCreateInfo = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings.data(), setLayoutBindings.size());
|
||||||
|
|
@ -663,7 +663,7 @@ public:
|
||||||
VK_CHECK_RESULT(uniformBuffers.blurParams.map());
|
VK_CHECK_RESULT(uniformBuffers.blurParams.map());
|
||||||
VK_CHECK_RESULT(uniformBuffers.skyBox.map());
|
VK_CHECK_RESULT(uniformBuffers.skyBox.map());
|
||||||
|
|
||||||
// Intialize uniform buffers
|
// Initialize uniform buffers
|
||||||
updateUniformBuffersScene();
|
updateUniformBuffersScene();
|
||||||
updateUniformBuffersBlur();
|
updateUniformBuffersBlur();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -422,7 +422,7 @@ public:
|
||||||
indices.push_back((y + 1) * cloth.gridsize.x + x);
|
indices.push_back((y + 1) * cloth.gridsize.x + x);
|
||||||
indices.push_back((y)* cloth.gridsize.x + x);
|
indices.push_back((y)* cloth.gridsize.x + x);
|
||||||
}
|
}
|
||||||
// Primitive restart (signlaed by special value 0xFFFFFFFF)
|
// Primitive restart (signaled by special value 0xFFFFFFFF)
|
||||||
indices.push_back(0xFFFFFFFF);
|
indices.push_back(0xFFFFFFFF);
|
||||||
}
|
}
|
||||||
uint32_t indexBufferSize = static_cast<uint32_t>(indices.size()) * sizeof(uint32_t);
|
uint32_t indexBufferSize = static_cast<uint32_t>(indices.size()) * sizeof(uint32_t);
|
||||||
|
|
|
||||||
|
|
@ -317,7 +317,7 @@ public:
|
||||||
|
|
||||||
// Vertex attribute bindings
|
// Vertex attribute bindings
|
||||||
attributeDescriptions = {
|
attributeDescriptions = {
|
||||||
// Per-vertex attributees
|
// Per-vertex attributes
|
||||||
// These are advanced for each vertex fetched by the vertex shader
|
// These are advanced for each vertex fetched by the vertex shader
|
||||||
vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, offsetof(vkglTF::Vertex, pos)), // Location 0: Position
|
vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 0, VK_FORMAT_R32G32B32_SFLOAT, offsetof(vkglTF::Vertex, pos)), // Location 0: Position
|
||||||
vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, offsetof(vkglTF::Vertex, normal)), // Location 1: Normal
|
vks::initializers::vertexInputAttributeDescription(VERTEX_BUFFER_BIND_ID, 1, VK_FORMAT_R32G32B32_SFLOAT, offsetof(vkglTF::Vertex, normal)), // Location 1: Normal
|
||||||
|
|
|
||||||
|
|
@ -681,7 +681,7 @@ public:
|
||||||
{
|
{
|
||||||
VulkanExampleBase::prepareFrame();
|
VulkanExampleBase::prepareFrame();
|
||||||
|
|
||||||
// Command buffer to be sumitted to the queue
|
// Command buffer to be submitted to the queue
|
||||||
submitInfo.commandBufferCount = 1;
|
submitInfo.commandBufferCount = 1;
|
||||||
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
||||||
VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE));
|
VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE));
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
* Note: Requires a device that supports the VK_EXT_conditional_rendering extension
|
* Note: Requires a device that supports the VK_EXT_conditional_rendering extension
|
||||||
*
|
*
|
||||||
* With conditional rendering it's possible to execute certain rendering commands based on a buffer value instead of having to rebuild the command buffers.
|
* With conditional rendering it's possible to execute certain rendering commands based on a buffer value instead of having to rebuild the command buffers.
|
||||||
* This example sets up a conditonal buffer with one value per glTF part, that is used to toggle visibility of single model parts.
|
* This example sets up a conditional buffer with one value per glTF part, that is used to toggle visibility of single model parts.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
|
* Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
|
||||||
*
|
*
|
||||||
|
|
@ -268,7 +268,7 @@ public:
|
||||||
/*
|
/*
|
||||||
[POI] Extension specific setup
|
[POI] Extension specific setup
|
||||||
|
|
||||||
Gets the function pointers required for conditonal rendering
|
Gets the function pointers required for conditional rendering
|
||||||
Sets up a dedicated conditional buffer that is used to determine visibility at draw time
|
Sets up a dedicated conditional buffer that is used to determine visibility at draw time
|
||||||
*/
|
*/
|
||||||
void prepareConditionalRendering()
|
void prepareConditionalRendering()
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Vulkan Example - Example for VK_EXT_debug_marker extension. To be used in conjuction with a debugging app like RenderDoc (https://renderdoc.org)
|
* Vulkan Example - Example for VK_EXT_debug_marker extension. To be used in conjunction with a debugging app like RenderDoc (https://renderdoc.org)
|
||||||
*
|
*
|
||||||
* Copyright (C) by Sascha Willems - www.saschawillems.de
|
* Copyright (C) by Sascha Willems - www.saschawillems.de
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ public:
|
||||||
float zFar = 64.0f;
|
float zFar = 64.0f;
|
||||||
float lightFOV = 100.0f;
|
float lightFOV = 100.0f;
|
||||||
|
|
||||||
// Depth bias (and slope) are used to avoid shadowing artefacts
|
// Depth bias (and slope) are used to avoid shadowing artifacts
|
||||||
float depthBiasConstant = 1.25f;
|
float depthBiasConstant = 1.25f;
|
||||||
float depthBiasSlope = 1.75f;
|
float depthBiasSlope = 1.75f;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -220,7 +220,7 @@ public:
|
||||||
descriptorPoolCI.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
descriptorPoolCI.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||||
descriptorPoolCI.poolSizeCount = static_cast<uint32_t>(descriptorPoolSizes.size());
|
descriptorPoolCI.poolSizeCount = static_cast<uint32_t>(descriptorPoolSizes.size());
|
||||||
descriptorPoolCI.pPoolSizes = descriptorPoolSizes.data();
|
descriptorPoolCI.pPoolSizes = descriptorPoolSizes.data();
|
||||||
// Max. number of descriptor sets that can be allocted from this pool (one per object)
|
// Max. number of descriptor sets that can be allocated from this pool (one per object)
|
||||||
descriptorPoolCI.maxSets = static_cast<uint32_t>(cubes.size());
|
descriptorPoolCI.maxSets = static_cast<uint32_t>(cubes.size());
|
||||||
|
|
||||||
VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolCI, nullptr, &descriptorPool));
|
VK_CHECK_RESULT(vkCreateDescriptorPool(device, &descriptorPoolCI, nullptr, &descriptorPool));
|
||||||
|
|
@ -266,7 +266,7 @@ public:
|
||||||
writeDescriptorSets[1].dstSet = cube.descriptorSet;
|
writeDescriptorSets[1].dstSet = cube.descriptorSet;
|
||||||
writeDescriptorSets[1].dstBinding = 1;
|
writeDescriptorSets[1].dstBinding = 1;
|
||||||
writeDescriptorSets[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
|
writeDescriptorSets[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
|
||||||
// Images use a different descriptor strucutre, so we use pImageInfo instead of pBufferInfo
|
// Images use a different descriptor structure, so we use pImageInfo instead of pBufferInfo
|
||||||
writeDescriptorSets[1].pImageInfo = &cube.texture.descriptor;
|
writeDescriptorSets[1].pImageInfo = &cube.texture.descriptor;
|
||||||
writeDescriptorSets[1].descriptorCount = 1;
|
writeDescriptorSets[1].descriptorCount = 1;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -368,7 +368,7 @@ public:
|
||||||
{
|
{
|
||||||
VulkanExampleBase::prepareFrame();
|
VulkanExampleBase::prepareFrame();
|
||||||
|
|
||||||
// Command buffer to be sumitted to the queue
|
// Command buffer to be submitted to the queue
|
||||||
submitInfo.commandBufferCount = 1;
|
submitInfo.commandBufferCount = 1;
|
||||||
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ public:
|
||||||
uniformBuffers.fs.destroy();
|
uniformBuffers.fs.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Basic parser fpr AngelCode bitmap font format files
|
// Basic parser for AngelCode bitmap font format files
|
||||||
// See http://www.angelcode.com/products/bmfont/doc/file_format.html for details
|
// See http://www.angelcode.com/products/bmfont/doc/file_format.html for details
|
||||||
void parsebmFont()
|
void parsebmFont()
|
||||||
{
|
{
|
||||||
|
|
@ -625,7 +625,7 @@ public:
|
||||||
{
|
{
|
||||||
VulkanExampleBase::prepareFrame();
|
VulkanExampleBase::prepareFrame();
|
||||||
|
|
||||||
// Command buffer to be sumitted to the queue
|
// Command buffer to be submitted to the queue
|
||||||
submitInfo.commandBufferCount = 1;
|
submitInfo.commandBufferCount = 1;
|
||||||
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -200,7 +200,7 @@ public:
|
||||||
{
|
{
|
||||||
VulkanExampleBase::prepareFrame();
|
VulkanExampleBase::prepareFrame();
|
||||||
|
|
||||||
// Command buffer to be sumitted to the queue
|
// Command buffer to be submitted to the queue
|
||||||
submitInfo.commandBufferCount = 1;
|
submitInfo.commandBufferCount = 1;
|
||||||
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -333,7 +333,7 @@ public:
|
||||||
{
|
{
|
||||||
VulkanExampleBase::prepareFrame();
|
VulkanExampleBase::prepareFrame();
|
||||||
|
|
||||||
// Command buffer to be sumitted to the queue
|
// Command buffer to be submitted to the queue
|
||||||
submitInfo.commandBufferCount = 1;
|
submitInfo.commandBufferCount = 1;
|
||||||
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -314,7 +314,7 @@ public:
|
||||||
{
|
{
|
||||||
VulkanExampleBase::prepareFrame();
|
VulkanExampleBase::prepareFrame();
|
||||||
|
|
||||||
// Command buffer to be sumitted to the queue
|
// Command buffer to be submitted to the queue
|
||||||
submitInfo.commandBufferCount = 1;
|
submitInfo.commandBufferCount = 1;
|
||||||
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
submitInfo.pCommandBuffers = &drawCmdBuffers[currentBuffer];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ public:
|
||||||
glm::mat4 matrix;
|
glm::mat4 matrix;
|
||||||
};
|
};
|
||||||
|
|
||||||
// A glTF material stores information in e.g. the exture that is attached to it and colors
|
// A glTF material stores information in e.g. the texture that is attached to it and colors
|
||||||
struct Material {
|
struct Material {
|
||||||
glm::vec4 baseColorFactor = glm::vec4(1.0f);
|
glm::vec4 baseColorFactor = glm::vec4(1.0f);
|
||||||
uint32_t baseColorTextureIndex;
|
uint32_t baseColorTextureIndex;
|
||||||
|
|
@ -235,7 +235,7 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the node contains mesh data, we load vertices and indices from the the buffers
|
// If the node contains mesh data, we load vertices and indices from the buffers
|
||||||
// In glTF this is done via accessors and buffer views
|
// In glTF this is done via accessors and buffer views
|
||||||
if (inputNode.mesh > -1) {
|
if (inputNode.mesh > -1) {
|
||||||
const tinygltf::Mesh mesh = input.meshes[inputNode.mesh];
|
const tinygltf::Mesh mesh = input.meshes[inputNode.mesh];
|
||||||
|
|
@ -555,7 +555,7 @@ public:
|
||||||
&indexStaging.memory,
|
&indexStaging.memory,
|
||||||
indexBuffer.data()));
|
indexBuffer.data()));
|
||||||
|
|
||||||
// Create device local buffers (targat)
|
// Create device local buffers (target)
|
||||||
VK_CHECK_RESULT(vulkanDevice->createBuffer(
|
VK_CHECK_RESULT(vulkanDevice->createBuffer(
|
||||||
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
||||||
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ void VulkanglTFScene::loadMaterials(tinygltf::Model& input)
|
||||||
if (glTFMaterial.additionalValues.find("normalTexture") != glTFMaterial.additionalValues.end()) {
|
if (glTFMaterial.additionalValues.find("normalTexture") != glTFMaterial.additionalValues.end()) {
|
||||||
materials[i].normalTextureIndex = glTFMaterial.additionalValues["normalTexture"].TextureIndex();
|
materials[i].normalTextureIndex = glTFMaterial.additionalValues["normalTexture"].TextureIndex();
|
||||||
}
|
}
|
||||||
// Get some additonal material parameters that are used in this sample
|
// Get some additional material parameters that are used in this sample
|
||||||
materials[i].alphaMode = glTFMaterial.alphaMode;
|
materials[i].alphaMode = glTFMaterial.alphaMode;
|
||||||
materials[i].alphaCutOff = (float)glTFMaterial.alphaCutoff;
|
materials[i].alphaCutOff = (float)glTFMaterial.alphaCutoff;
|
||||||
materials[i].doubleSided = glTFMaterial.doubleSided;
|
materials[i].doubleSided = glTFMaterial.doubleSided;
|
||||||
|
|
@ -114,7 +114,7 @@ void VulkanglTFScene::loadNode(const tinygltf::Node& inputNode, const tinygltf::
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the node contains mesh data, we load vertices and indices from the the buffers
|
// If the node contains mesh data, we load vertices and indices from the buffers
|
||||||
// In glTF this is done via accessors and buffer views
|
// In glTF this is done via accessors and buffer views
|
||||||
if (inputNode.mesh > -1) {
|
if (inputNode.mesh > -1) {
|
||||||
const tinygltf::Mesh mesh = input.meshes[inputNode.mesh];
|
const tinygltf::Mesh mesh = input.meshes[inputNode.mesh];
|
||||||
|
|
@ -417,7 +417,7 @@ void VulkanExample::loadglTFFile(std::string filename)
|
||||||
&indexStaging.memory,
|
&indexStaging.memory,
|
||||||
indexBuffer.data()));
|
indexBuffer.data()));
|
||||||
|
|
||||||
// Create device local buffers (targat)
|
// Create device local buffers (target)
|
||||||
VK_CHECK_RESULT(vulkanDevice->createBuffer(
|
VK_CHECK_RESULT(vulkanDevice->createBuffer(
|
||||||
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
||||||
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ public:
|
||||||
bool visible = true;
|
bool visible = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
// A glTF material stores information in e.g. the exture that is attached to it and colors
|
// A glTF material stores information in e.g. the texture that is attached to it and colors
|
||||||
struct Material {
|
struct Material {
|
||||||
glm::vec4 baseColorFactor = glm::vec4(1.0f);
|
glm::vec4 baseColorFactor = glm::vec4(1.0f);
|
||||||
uint32_t baseColorTextureIndex;
|
uint32_t baseColorTextureIndex;
|
||||||
|
|
|
||||||
|
|
@ -453,7 +453,7 @@ void VulkanglTFModel::drawNode(VkCommandBuffer commandBuffer, VkPipelineLayout p
|
||||||
{
|
{
|
||||||
if (node.mesh.primitives.size() > 0)
|
if (node.mesh.primitives.size() > 0)
|
||||||
{
|
{
|
||||||
// Pass the node's matrix via push constanst
|
// Pass the node's matrix via push constants
|
||||||
// Traverse the node hierarchy to the top-most parent to get the final matrix of the current node
|
// Traverse the node hierarchy to the top-most parent to get the final matrix of the current node
|
||||||
glm::mat4 nodeMatrix = node.matrix;
|
glm::mat4 nodeMatrix = node.matrix;
|
||||||
VulkanglTFModel::Node *currentParent = node.parent;
|
VulkanglTFModel::Node *currentParent = node.parent;
|
||||||
|
|
@ -500,7 +500,7 @@ vkCmdPushConstants(commandBuffer, pipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, 0,
|
||||||
|
|
||||||
As this matrix won't change in our case, we pass this is a push constant to the vertex shader.
|
As this matrix won't change in our case, we pass this is a push constant to the vertex shader.
|
||||||
|
|
||||||
And we also bind the the shader storage buffer object of the skin so the vertex shader get's access to the current joint matrices for the skin to be applied to that particular node:
|
And we also bind the shader storage buffer object of the skin so the vertex shader get's access to the current joint matrices for the skin to be applied to that particular node:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 1, 1, &skins[node.skin].descriptorSet, 0, nullptr);
|
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 1, 1, &skins[node.skin].descriptorSet, 0, nullptr);
|
||||||
|
|
|
||||||
|
|
@ -337,7 +337,7 @@ void VulkanglTFModel::loadNode(const tinygltf::Node &inputNode, const tinygltf::
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the node contains mesh data, we load vertices and indices from the the buffers
|
// If the node contains mesh data, we load vertices and indices from the buffers
|
||||||
// In glTF this is done via accessors and buffer views
|
// In glTF this is done via accessors and buffer views
|
||||||
if (inputNode.mesh > -1)
|
if (inputNode.mesh > -1)
|
||||||
{
|
{
|
||||||
|
|
@ -790,7 +790,7 @@ void VulkanExample::loadglTFFile(std::string filename)
|
||||||
&indexStaging.memory,
|
&indexStaging.memory,
|
||||||
indexBuffer.data()));
|
indexBuffer.data()));
|
||||||
|
|
||||||
// Create device local buffers (targat)
|
// Create device local buffers (target)
|
||||||
VK_CHECK_RESULT(vulkanDevice->createBuffer(
|
VK_CHECK_RESULT(vulkanDevice->createBuffer(
|
||||||
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
||||||
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ public:
|
||||||
|
|
||||||
VkCommandBuffer primaryCommandBuffer;
|
VkCommandBuffer primaryCommandBuffer;
|
||||||
|
|
||||||
// Secondary scene command buffers used to store backgdrop and user interface
|
// Secondary scene command buffers used to store backdrop and user interface
|
||||||
struct SecondaryCommandBuffers {
|
struct SecondaryCommandBuffers {
|
||||||
VkCommandBuffer background;
|
VkCommandBuffer background;
|
||||||
VkCommandBuffer ui;
|
VkCommandBuffer ui;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Vulkan Example - Using occlusion query for visbility testing
|
* Vulkan Example - Using occlusion query for visibility testing
|
||||||
*
|
*
|
||||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,7 @@ public:
|
||||||
|
|
||||||
// Instead of preparing the descriptor sets up-front, using push descriptors we can set (push) them inside of a command buffer
|
// Instead of preparing the descriptor sets up-front, using push descriptors we can set (push) them inside of a command buffer
|
||||||
// This allows a more dynamic approach without the need to create descriptor sets for each model
|
// This allows a more dynamic approach without the need to create descriptor sets for each model
|
||||||
// Note: dstSet for each descriptor set write is left at zero as this is ignored when ushing push descriptors
|
// Note: dstSet for each descriptor set write is left at zero as this is ignored when using push descriptors
|
||||||
|
|
||||||
std::array<VkWriteDescriptorSet, 3> writeDescriptorSets{};
|
std::array<VkWriteDescriptorSet, 3> writeDescriptorSets{};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue