34
34
#include < glm/gtc/type_ptr.hpp>
35
35
#include < glm/ext.hpp> // "glm/gtx/string_cast.hpp"
36
36
37
- float vertexInfo2[][3 ] = {
38
- {-0 .5f , -0 .5f , 0 .0f }, {1 .0f , 0 .0f , 0 .0f },
39
- {0 .5f , -0 .5f , 0 .0f }, {0 .0f , 1 .0f , 0 .0f },
40
- {0 .5f , 0 .5f , 0 .0f }, {0 .0f , 0 .0f , 1 .0f },
41
- {-0 .5f , 0 .5f , 0 .0f }, {1 .0f , 1 .0f , 1 .0f }
42
- };
43
-
44
- const uint16_t indices2[] = {
45
- 0 , 1 , 2 , 2 , 3 , 1
46
- };
47
-
48
37
Renderer::Renderer (VkExtent2D& extent, VkPhysicalDeviceMemoryProperties& memProps)
49
38
: imageExtent(extent),
50
39
memProperties(memProps)
51
- {
52
- numVertsX = 7 ;
53
- numVertsY = 7 ;
54
-
40
+ {
55
41
numVerts = numVertsX * numVertsY;
56
42
numPrims = (numVertsX - 1 ) * (numVertsY - 1 ) * 2 ;
43
+ vertexInfoSize = sizeof (float ) * numComponents * numVerts * 2 ;
44
+ numIndices = numPrims * numComponents;
45
+ indicesBufferSize = sizeof (uint16_t ) * numIndices;
57
46
58
- uint32_t numComponents = 3 ;
59
-
60
- uint32_t vertInfoSize = sizeof (float )*numComponents*numVerts*2 ;
61
-
62
- mat4Size = vertInfoSize;
63
-
64
- vertexInfo = static_cast <float *>(malloc (vertInfoSize));
65
-
66
- numIndices = numPrims * 3 ;
67
-
68
- indicesBufferSize = sizeof (uint16_t )*numIndices;
69
-
47
+ vertexInfo = static_cast <float *>(malloc (vertexInfoSize));
70
48
indices = static_cast <uint16_t *>(malloc (indicesBufferSize));
71
-
72
49
framebuffers = static_cast <VkFramebuffer*>(malloc (sizeof (VkFramebuffer)*numFBOs));
73
50
drawCommandBuffers = static_cast <VkCommandBuffer*>(malloc (sizeof (VkCommandBuffer)*numDrawCmdBuffers));
74
51
attributeDescriptions = static_cast <VkVertexInputAttributeDescription*>(malloc (sizeof (VkVertexInputAttributeDescription)*numAttrDesc));
75
52
}
76
53
77
54
Renderer::~Renderer ()
78
55
{
56
+ free (vertexInfo);
57
+ free (indices);
79
58
free (framebuffers);
80
59
free (drawCommandBuffers);
81
60
free (attributeDescriptions);
82
- free (vertexInfo);
83
- free (indices);
84
61
}
85
62
86
63
bool Renderer::Init (VkDevice& device, const VkFormat& surfaceFormat, const VkImageView* imageViews, uint32_t queueFamilyId)
@@ -105,8 +82,8 @@ bool Renderer::Init(VkDevice& device, const VkFormat& surfaceFormat, const VkIma
105
82
for (uint32_t j = 0 ; j < numVertsX; ++j)
106
83
{
107
84
vertexInfo[index ] = xPos;
108
- vertexInfo[index + 1 ] = yPos ;
109
- vertexInfo[index + 2 ] = zPos ;
85
+ vertexInfo[index + 1 ] = zPos ;
86
+ vertexInfo[index + 2 ] = yPos ;
110
87
111
88
vertexInfo[index + 3 ] = 0 .0f ;
112
89
vertexInfo[index + 4 ] = 0 .0f ;
@@ -117,7 +94,6 @@ bool Renderer::Init(VkDevice& device, const VkFormat& surfaceFormat, const VkIma
117
94
}
118
95
119
96
xPos = xStartPos;
120
-
121
97
yPos += delta;
122
98
}
123
99
@@ -140,11 +116,8 @@ bool Renderer::Init(VkDevice& device, const VkFormat& surfaceFormat, const VkIma
140
116
}
141
117
142
118
SetupServerSideVertexBuffer (device);
143
-
144
119
SetupIndexBuffer (device);
145
-
146
120
SetupUniformBuffer (device);
147
-
148
121
SetupShaderParameters (device);
149
122
150
123
std::ifstream file (" vert.spv" , std::ios::ate | std::ios::binary);
@@ -499,18 +472,12 @@ void Renderer::ConstructFrames()
499
472
renderPassBeginInfo.framebuffer = framebuffers[i];
500
473
501
474
vkBeginCommandBuffer (drawCommandBuffers[i], &beginInfo);
502
-
503
475
vkCmdBeginRenderPass (drawCommandBuffers[i], &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
504
-
505
476
vkCmdBindDescriptorSets (drawCommandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0 , 1 , &descriptorSet, 0 , nullptr );
506
-
507
477
vkCmdBindPipeline (drawCommandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
508
-
509
478
vkCmdBindVertexBuffers (drawCommandBuffers[i], 0 , 1 , &vertexBuffer, offsets);
510
479
vkCmdBindIndexBuffer (drawCommandBuffers[i], indexBuffer, 0 , VK_INDEX_TYPE_UINT16);
511
-
512
480
vkCmdDrawIndexed (drawCommandBuffers[i], numIndices, 1 , 0 , 0 , 0 );
513
-
514
481
vkCmdEndRenderPass (drawCommandBuffers[i]);
515
482
516
483
result = vkEndCommandBuffer (drawCommandBuffers[i]);
@@ -589,7 +556,7 @@ bool Renderer::SetupShaderParameters(VkDevice& device)
589
556
VkDescriptorBufferInfo bufferInfo = {};
590
557
bufferInfo.buffer = uniformBuffer;
591
558
bufferInfo.offset = 0 ;
592
- bufferInfo.range = mat4Size ;
559
+ bufferInfo.range = mvpSize ;
593
560
594
561
VkWriteDescriptorSet descriptorWrite = {};
595
562
descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
@@ -638,12 +605,10 @@ bool Renderer::SetupClientSideVertexBuffer(VkDevice& device)
638
605
{
639
606
VkBufferCreateInfo bufferInfo = {};
640
607
bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
641
- bufferInfo.size = sizeof ( float [ 3 ]) * numVertices * 2 ;
608
+ bufferInfo.size = vertexInfoSize ;
642
609
bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
643
610
bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
644
-
645
- std::cout << bufferInfo.size << std::endl;
646
-
611
+
647
612
VkResult result = vkCreateBuffer (device, &bufferInfo, nullptr , &vertexBuffer);
648
613
649
614
if (result != VK_SUCCESS)
@@ -684,7 +649,7 @@ bool Renderer::SetupClientSideVertexBuffer(VkDevice& device)
684
649
685
650
bool Renderer::SetupServerSideVertexBuffer (VkDevice& device)
686
651
{
687
- VkDeviceSize size = mat4Size; // sizeof(vertexInfo) ;
652
+ VkDeviceSize size = vertexInfoSize ;
688
653
689
654
VkMemoryPropertyFlags properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
690
655
VkBufferUsageFlags usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
@@ -721,10 +686,12 @@ void Renderer::SetupDynamicTransfer(VkDevice& device)
721
686
vkBeginCommandBuffer (dynamicTransferCommandBuffer, &beginInfo);
722
687
723
688
VkBufferCopy copyRegion = {};
724
- copyRegion.size = mat4Size;
725
-
689
+ copyRegion.size = mvpSize;
726
690
vkCmdCopyBuffer (dynamicTransferCommandBuffer, uniformTransferBuffer, uniformBuffer, 1 , ©Region);
727
691
692
+ copyRegion.size = vertexInfoSize;
693
+ vkCmdCopyBuffer (dynamicTransferCommandBuffer, vertexTransferBuffer, vertexBuffer, 1 , ©Region);
694
+
728
695
vkEndCommandBuffer (dynamicTransferCommandBuffer);
729
696
}
730
697
@@ -748,9 +715,6 @@ VkCommandBuffer& Renderer::TransferStaticBuffers(VkDevice& device)
748
715
// copyRegion.srcOffset = 0;
749
716
// copyRegion.dstOffset = 0;
750
717
751
- copyRegion.size = mat4Size;// sizeof(vertexInfo);
752
- vkCmdCopyBuffer (staticTransferCommandBuffer, vertexTransferBuffer, vertexBuffer, 1 , ©Region);
753
-
754
718
copyRegion.size = indicesBufferSize;
755
719
vkCmdCopyBuffer (staticTransferCommandBuffer, indexTransferBuffer, indexBuffer, 1 , ©Region);
756
720
@@ -766,14 +730,14 @@ VkCommandBuffer& Renderer::TransferDynamicBuffers(VkDevice& device)
766
730
auto currentTime = std::chrono::high_resolution_clock::now ();
767
731
float time = std::chrono::duration_cast<std::chrono::milliseconds>(currentTime - startTime).count () / 1000 .0f ;
768
732
769
- glm::mat4 model = glm::rotate (glm::mat4 (), time * glm::radians (90 .0f ), glm::vec3 (0 .0f , 0 .0f , 1 .0f ));
770
- glm::mat4 view = glm::lookAt (glm::vec3 (2 .0f , 2 .0f , 2 .0f ), glm::vec3 (0 .0f , 0 .0f , 0 .0f ), glm::vec3 (0 .0f , 0 .0f , 1 .0f ));
771
- glm::mat4 proj = glm::perspective (glm::radians (45 .0f ), imageExtent.width / (float ) imageExtent.height , 0 .1f , 100 .0f );
733
+ glm::mat4 model; // = glm::rotate(glm::mat4(), time * glm::radians(90.0f), glm::vec3(0.0f, 0.0f, 1.0f));
734
+ glm::mat4 view = glm::lookAt (glm::vec3 (0 .0f , 3 .0f , 3 .0f ), glm::vec3 (0 .0f , 0 .0f , 0 .0f ), glm::vec3 (0 .0f , 1 .0f , 0 .0f ));
735
+ glm::mat4 proj = glm::perspective (glm::radians (90 .0f ), imageExtent.width / (float ) imageExtent.height , 0 .1f , 100 .0f );
772
736
proj[1 ][1 ] *= -1 ;
773
737
774
738
mvp = proj * view * model;
775
739
776
- VkDeviceSize size = mat4Size ;
740
+ VkDeviceSize size = mvpSize ;
777
741
778
742
void * data;
779
743
vkMapMemory (device, uniformTransferBufferMemory, 0 , size, 0 , &data);
@@ -842,7 +806,7 @@ bool Renderer::SetupBuffer(VkDevice& device, VkBuffer& buffer, VkDeviceMemory& m
842
806
843
807
void Renderer::SetupUniformBuffer (VkDevice &device)
844
808
{
845
- VkDeviceSize size = mat4Size ;
809
+ VkDeviceSize size = mvpSize ;
846
810
847
811
VkMemoryPropertyFlags properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
848
812
VkBufferUsageFlags usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
0 commit comments