Browse Source

Remove loading models

Loading models is removes from the ComputeAndGraphics and shaders folder is reordered.
master
AliMehrabani 10 months ago
parent
commit
a3f387cdd4
  1. 24
      VkTest.pro
  2. 57
      VulkanTutorial1.0/ComputeAndGraphics.cpp
  3. 38
      VulkanTutorial1.0/ComputeAndGraphics.h
  4. 2
      VulkanTutorial1.0/Types.h
  5. 0
      shaders/VulkanTutorial1.0/ComputeAndGraphics/compComp.spv
  6. 3
      shaders/VulkanTutorial1.0/ComputeAndGraphics/compile.sh
  7. BIN
      shaders/VulkanTutorial1.0/ComputeAndGraphics/fragComp.spv
  8. 0
      shaders/VulkanTutorial1.0/ComputeAndGraphics/shaderCompute.comp
  9. 2
      shaders/VulkanTutorial1.0/ComputeAndGraphics/shaderCompute.frag
  10. 0
      shaders/VulkanTutorial1.0/ComputeAndGraphics/shaderCompute.vert
  11. 0
      shaders/VulkanTutorial1.0/ComputeAndGraphics/vertComp.spv
  12. 2
      shaders/VulkanTutorial1.0/HelloTriangle/compile.sh
  13. 0
      shaders/VulkanTutorial1.0/HelloTriangle/frag.spv
  14. 0
      shaders/VulkanTutorial1.0/HelloTriangle/shader.frag
  15. 0
      shaders/VulkanTutorial1.0/HelloTriangle/shader.vert
  16. 0
      shaders/VulkanTutorial1.0/HelloTriangle/vert.spv
  17. BIN
      shaders/comp.spv
  18. BIN
      shaders/fragComp.spv

24
VkTest.pro

@ -24,16 +24,20 @@ HEADERS += \ \
VulkanTutorial1.0/Types.h VulkanTutorial1.0/Types.h
DISTFILES += \ DISTFILES += \ \
shaders/comp.spv \ shaders/VulkanTutorial1.0/ComputeAndGraphics/compComp.spv \
shaders/compile.sh \ shaders/VulkanTutorial1.0/ComputeAndGraphics/compile.sh \
shaders/frag.spv \ shaders/VulkanTutorial1.0/ComputeAndGraphics/fragComp.spv \
shaders/shader.frag \ shaders/VulkanTutorial1.0/ComputeAndGraphics/shaderCompute.comp \
shaders/shader.vert \ shaders/VulkanTutorial1.0/ComputeAndGraphics/shaderCompute.frag \
shaders/shaderCompute.comp \ shaders/VulkanTutorial1.0/ComputeAndGraphics/shaderCompute.vert \
shaders/shaderCompute.frag \ shaders/VulkanTutorial1.0/ComputeAndGraphics/vertComp.spv \
shaders/shaderCompute.vert \ shaders/VulkanTutorial1.0/HelloTriangle/compile.sh \
shaders/vert.spv shaders/VulkanTutorial1.0/HelloTriangle/frag.spv \
shaders/VulkanTutorial1.0/HelloTriangle/shader.frag \
shaders/VulkanTutorial1.0/HelloTriangle/shader.vert \
shaders/VulkanTutorial1.0/HelloTriangle/vert.spv
contains(ANDROID_TARGET_ARCH,arm64-v8a) { contains(ANDROID_TARGET_ARCH,arm64-v8a) {
QT += QT +=

57
VulkanTutorial1.0/ComputeAndGraphics.cpp

@ -2,7 +2,6 @@
#include <QDebug> #include <QDebug>
#include <set> #include <set>
#include <unordered_map>
#include <random> #include <random>
VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo
@ -95,7 +94,6 @@ void ComputeAndGraphics::initVulkan()
createTextureImage(); createTextureImage();
createTextureImageView(); createTextureImageView();
createTextureSampler(); createTextureSampler();
loadModel();
createVertexBuffer(); createVertexBuffer();
createIndexBuffer(); createIndexBuffer();
// createShaderStorageBuffers(); // createShaderStorageBuffers();
@ -682,8 +680,8 @@ VkDescriptorSetLayoutBinding ComputeAndGraphics::createLayoutBindingInfo(uint32_
void ComputeAndGraphics::createGraphicsPipeline() void ComputeAndGraphics::createGraphicsPipeline()
{ {
auto vertShaderCode = readFile("shaders/vert.spv"); auto vertShaderCode = readFile("shaders/vertComp.spv");
auto fragShaderCode = readFile("shaders/frag.spv"); auto fragShaderCode = readFile("shaders/fragComp.spv");
VkShaderModule vertShaderModule = createShaderModule(vertShaderCode); VkShaderModule vertShaderModule = createShaderModule(vertShaderCode);
VkShaderModule fragShaderModule = createShaderModule(fragShaderCode); VkShaderModule fragShaderModule = createShaderModule(fragShaderCode);
VkPipelineShaderStageCreateInfo vertShaderStageInfo = createPipelineShaderInfo(VK_SHADER_STAGE_VERTEX_BIT, vertShaderModule); VkPipelineShaderStageCreateInfo vertShaderStageInfo = createPipelineShaderInfo(VK_SHADER_STAGE_VERTEX_BIT, vertShaderModule);
@ -892,7 +890,7 @@ VkPipelineColorBlendStateCreateInfo ComputeAndGraphics::colorPipelineBlendStateI
void ComputeAndGraphics::createComputePipeline() void ComputeAndGraphics::createComputePipeline()
{ {
auto computeShaderCode = readFile("shaders/comp.spv"); auto computeShaderCode = readFile("shaders/compComp.spv");
VkShaderModule computeShaderModule = createShaderModule(computeShaderCode); VkShaderModule computeShaderModule = createShaderModule(computeShaderCode);
VkPipelineShaderStageCreateInfo computeShaderStageInfo = createPipelineShaderInfo(VK_SHADER_STAGE_COMPUTE_BIT, computeShaderModule); VkPipelineShaderStageCreateInfo computeShaderStageInfo = createPipelineShaderInfo(VK_SHADER_STAGE_COMPUTE_BIT, computeShaderModule);
@ -1022,8 +1020,7 @@ bool ComputeAndGraphics::hasStencilComponent(VkFormat format) {
void ComputeAndGraphics::createTextureImage() { void ComputeAndGraphics::createTextureImage() {
int texWidth, texHeight, texChannels; int texWidth, texHeight, texChannels;
// stbi_uc* pixels = stbi_load("/home/ali-mehrabani/Qt_projects/VkTest/textures/texture.jpg", &texWidth, &texHeight, &texChannels, STBI_rgb_alpha); stbi_uc* pixels = stbi_load("/home/ali-mehrabani/Qt_projects/VkTest/textures/texture.jpg", &texWidth, &texHeight, &texChannels, STBI_rgb_alpha);
stbi_uc* pixels = stbi_load(TEXTURE_PATH.c_str(), &texWidth, &texHeight, &texChannels, STBI_rgb_alpha);
VkDeviceSize imageSize = texWidth * texHeight * 4; VkDeviceSize imageSize = texWidth * texHeight * 4;
if (!pixels) { if (!pixels) {
@ -1278,52 +1275,6 @@ void ComputeAndGraphics::createTextureSampler()
} }
} }
void ComputeAndGraphics::loadModel() {
tinyobj::attrib_t attrib;
std::vector<tinyobj::shape_t> shapes;
std::vector<tinyobj::material_t> materials;
std::string warn, err;
if (!tinyobj::LoadObj(&attrib, &shapes, &materials, &warn, &err, MODEL_PATH.c_str())) {
throw std::runtime_error(warn + err);
}
std::unordered_map<Vertex, uint32_t> uniqueVertices{};
for (const auto& shape : shapes) {
for (const auto& index : shape.mesh.indices) {
Vertex vertex = createLoadModelVertex(attrib, index);
if (uniqueVertices.count(vertex) == 0) {
uniqueVertices[vertex] = static_cast<uint32_t>(_vertices.size());
_vertices.push_back(vertex);
}
_indices.push_back(uniqueVertices[vertex]);
}
}
}
Vertex ComputeAndGraphics::createLoadModelVertex(tinyobj::attrib_t attrib, tinyobj::index_t index)
{
Vertex vertex{};
vertex.pos = {
attrib.vertices[3 * index.vertex_index + 0],
attrib.vertices[3 * index.vertex_index + 1],
attrib.vertices[3 * index.vertex_index + 2]
};
vertex.texCoord = {
attrib.texcoords[2 * index.texcoord_index + 0],
1.0f - attrib.texcoords[2 * index.texcoord_index + 1]
};
vertex.color = {1.0f, 1.0f, 1.0f};
return vertex;
}
void ComputeAndGraphics::createVertexBuffer() void ComputeAndGraphics::createVertexBuffer()
{ {
VkDeviceSize bufferSize = sizeof(_vertices[0]) * _vertices.size(); VkDeviceSize bufferSize = sizeof(_vertices[0]) * _vertices.size();

38
VulkanTutorial1.0/ComputeAndGraphics.h

@ -111,16 +111,6 @@ struct Vertex {
} }
}; };
namespace std {
template<> struct hash<Vertex> {
size_t operator()(Vertex const& vertex) const {
return ((hash<glm::vec3>()(vertex.pos) ^
(hash<glm::vec3>()(vertex.color) << 1)) >> 1) ^
(hash<glm::vec2>()(vertex.texCoord) << 1);
}
};
}
struct UniformBufferObject { struct UniformBufferObject {
alignas(16) glm::mat4 model; alignas(16) glm::mat4 model;
alignas(16) glm::mat4 view; alignas(16) glm::mat4 view;
@ -221,8 +211,6 @@ private:
VkFormat findDepthFormat(); VkFormat findDepthFormat();
bool hasStencilComponent(VkFormat format); bool hasStencilComponent(VkFormat format);
void loadModel();
void createShaderStorageBuffers(); void createShaderStorageBuffers();
void createComputePipeline(); void createComputePipeline();
void createComputeCommandBuffers(); void createComputeCommandBuffers();
@ -277,8 +265,6 @@ private:
VkBufferImageCopy createBufferImageCopyInfo(uint32_t width, uint32_t height); VkBufferImageCopy createBufferImageCopyInfo(uint32_t width, uint32_t height);
Vertex createLoadModelVertex(tinyobj::attrib_t attrib, tinyobj::index_t index);
void copyVerticesToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory); void copyVerticesToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory);
void copyIndicesToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory); void copyIndicesToStagingBuffer(VkBuffer& stagingBuffer, VkDeviceMemory& stagingBufferMemory);
@ -317,33 +303,27 @@ private:
const int32_t WIDTH = 800; const int32_t WIDTH = 800;
const int32_t HEIGHT = 600; const int32_t HEIGHT = 600;
const std::string MODEL_PATH = "/home/ali-mehrabani/Qt_projects/VkTest/models/viking_room.obj";
const std::string TEXTURE_PATH = "/home/ali-mehrabani/Qt_projects/VkTest/textures/viking_room.png";
const std::vector<const char*> validationLayers = { const std::vector<const char*> validationLayers = {
"VK_LAYER_KHRONOS_validation" "VK_LAYER_KHRONOS_validation"
}; };
const std::vector<const char*> deviceExtensions = { const std::vector<const char*> deviceExtensions = {
VK_KHR_SWAPCHAIN_EXTENSION_NAME VK_KHR_SWAPCHAIN_EXTENSION_NAME
}; };
// const std::vector<Vertex> _vertices = { const std::vector<Vertex> _vertices = {
// {{-0.5f, -0.5f, 0.0f}, {1.0f, 0.0f, 0.0f}, {1.0f, 0.0f}}, {{-0.5f, -0.5f, 0.0f}, {1.0f, 0.0f, 0.0f}, {1.0f, 0.0f}},
// {{0.5f, -0.5f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f}}, {{0.5f, -0.5f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f}},
// {{0.5f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f}, {0.0f, 1.0f}}, {{0.5f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f}, {0.0f, 1.0f}},
// {{-0.5f, 0.5f, 0.0f}, {1.0f, 1.0f, 1.0f}, {1.0f, 1.0f}}, {{-0.5f, 0.5f, 0.0f}, {1.0f, 1.0f, 1.0f}, {1.0f, 1.0f}},
// {{-0.5f, -0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}, {0.0f, 0.0f}}, // {{-0.5f, -0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}, {0.0f, 0.0f}},
// {{0.5f, -0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}}, // {{0.5f, -0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}},
// {{0.5f, 0.5f, -0.5f}, {0.0f, 0.0f, 1.0f}, {1.0f, 1.0f}}, // {{0.5f, 0.5f, -0.5f}, {0.0f, 0.0f, 1.0f}, {1.0f, 1.0f}},
// {{-0.5f, 0.5f, -0.5f}, {1.0f, 1.0f, 1.0f}, {0.0f, 1.0f}} // {{-0.5f, 0.5f, -0.5f}, {1.0f, 1.0f, 1.0f}, {0.0f, 1.0f}}
// }; };
// const std::vector<uint16_t> _indices = { const std::vector<uint32_t> _indices = {
// 0, 1, 2, 2, 3, 0, 0, 1, 2, 2, 3, 0,
// 4, 5, 6, 6, 7, 4 // 4, 5, 6, 6, 7, 4
// }; };
std::vector<Vertex> _vertices;
std::vector<uint32_t> _indices;
uint32_t currentFrame = 0; uint32_t currentFrame = 0;
bool framebufferResized = false; bool framebufferResized = false;

2
VulkanTutorial1.0/Types.h

@ -19,8 +19,6 @@
#define GLM_FORCE_DEPTH_ZERO_TO_ONE #define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp> #include <glm/gtc/matrix_transform.hpp>
#define GLM_ENABLE_EXPERIMENTAL
#include <glm/gtx/hash.hpp>
#include <stb_image/stb_image.h> #include <stb_image/stb_image.h>
#include <tiny_obj_loader/tiny_obj_loader.h> #include <tiny_obj_loader/tiny_obj_loader.h>

0
shaders/compComp.spv → shaders/VulkanTutorial1.0/ComputeAndGraphics/compComp.spv

3
shaders/compile.sh → shaders/VulkanTutorial1.0/ComputeAndGraphics/compile.sh

@ -1,6 +1,3 @@
/usr/bin/glslc shader.vert -o vert.spv
/usr/bin/glslc shader.frag -o frag.spv
/usr/bin/glslc shaderCompute.vert -o vertComp.spv /usr/bin/glslc shaderCompute.vert -o vertComp.spv
/usr/bin/glslc shaderCompute.frag -o fragComp.spv /usr/bin/glslc shaderCompute.frag -o fragComp.spv
/usr/bin/glslc shaderCompute.comp -o compComp.spv /usr/bin/glslc shaderCompute.comp -o compComp.spv

BIN
shaders/VulkanTutorial1.0/ComputeAndGraphics/fragComp.spv

Binary file not shown.

0
shaders/shaderCompute.comp → shaders/VulkanTutorial1.0/ComputeAndGraphics/shaderCompute.comp

2
shaders/shaderCompute.frag → shaders/VulkanTutorial1.0/ComputeAndGraphics/shaderCompute.frag

@ -10,6 +10,6 @@ layout(location = 0) out vec4 outColor;
void main() { void main() {
outColor = texture(texSampler, fragTexCoord * 1.0); outColor = texture(texSampler, fragTexCoord * 1.0);
vec2 coord = gl_PointCoord - vec2(0.5); // vec2 coord = gl_PointCoord - vec2(0.5);
// outColor = vec4(fragColor, 0.5 - length(coord)); // outColor = vec4(fragColor, 0.5 - length(coord));
} }

0
shaders/shaderCompute.vert → shaders/VulkanTutorial1.0/ComputeAndGraphics/shaderCompute.vert

0
shaders/vertComp.spv → shaders/VulkanTutorial1.0/ComputeAndGraphics/vertComp.spv

2
shaders/VulkanTutorial1.0/HelloTriangle/compile.sh

@ -0,0 +1,2 @@
/usr/bin/glslc shader.vert -o vert.spv
/usr/bin/glslc shader.frag -o frag.spv

0
shaders/frag.spv → shaders/VulkanTutorial1.0/HelloTriangle/frag.spv

0
shaders/shader.frag → shaders/VulkanTutorial1.0/HelloTriangle/shader.frag

0
shaders/shader.vert → shaders/VulkanTutorial1.0/HelloTriangle/shader.vert

0
shaders/vert.spv → shaders/VulkanTutorial1.0/HelloTriangle/vert.spv

BIN
shaders/comp.spv

Binary file not shown.

BIN
shaders/fragComp.spv

Binary file not shown.
Loading…
Cancel
Save