@@ -161,6 +161,9 @@ void initApplication(SDL_Window* window) {
161161
162162 recreateRenderPass ();
163163
164+ // model = createModel(context, "../data/models/monkey.glb");
165+ model = createModel (context, " ../libs/glTF-Sample-Models/2.0/BoomBox/glTF-Binary/BoomBox.glb" );
166+
164167 {
165168 VkSamplerCreateInfo createInfo = {VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO};
166169 createInfo.magFilter = VK_FILTER_NEAREST;
@@ -227,6 +230,7 @@ void initApplication(SDL_Window* window) {
227230 {
228231 VkDescriptorPoolSize poolSizes[] = {
229232 {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, FRAMES_IN_FLIGHT},
233+ {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, FRAMES_IN_FLIGHT},
230234 };
231235 VkDescriptorPoolCreateInfo createInfo = {VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO};
232236 createInfo.maxSets = FRAMES_IN_FLIGHT;
@@ -240,6 +244,7 @@ void initApplication(SDL_Window* window) {
240244 {
241245 VkDescriptorSetLayoutBinding bindings[] = {
242246 {0 , VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1 , VK_SHADER_STAGE_VERTEX_BIT, 0 },
247+ {1 , VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1 , VK_SHADER_STAGE_FRAGMENT_BIT, &sampler},
243248 };
244249 VkDescriptorSetLayoutCreateInfo createInfo = {VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO};
245250 createInfo.bindingCount = ARRAY_COUNT (bindings);
@@ -254,13 +259,20 @@ void initApplication(SDL_Window* window) {
254259 VKA (vkAllocateDescriptorSets (context->device , &allocateInfo, &modelDescriptorSets[i]));
255260
256261 VkDescriptorBufferInfo bufferInfo = {modelUniformBuffers[i].buffer , 0 , sizeof (glm::mat4)};
257- VkWriteDescriptorSet descriptorWrites[1 ];
262+ VkDescriptorImageInfo imageInfo = {sampler, model.albedoTexture .view , VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL};
263+ VkWriteDescriptorSet descriptorWrites[2 ];
258264 descriptorWrites[0 ] = {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET};
259265 descriptorWrites[0 ].dstSet = modelDescriptorSets[i];
260266 descriptorWrites[0 ].dstBinding = 0 ;
261267 descriptorWrites[0 ].descriptorCount = 1 ;
262268 descriptorWrites[0 ].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
263269 descriptorWrites[0 ].pBufferInfo = &bufferInfo;
270+ descriptorWrites[1 ] = {VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET};
271+ descriptorWrites[1 ].dstSet = modelDescriptorSets[i];
272+ descriptorWrites[1 ].dstBinding = 1 ;
273+ descriptorWrites[1 ].descriptorCount = 1 ;
274+ descriptorWrites[1 ].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
275+ descriptorWrites[1 ].pImageInfo = &imageInfo;
264276 VK (vkUpdateDescriptorSets (context->device , ARRAY_COUNT (descriptorWrites), descriptorWrites, 0 , 0 ));
265277 }
266278 }
@@ -292,19 +304,23 @@ void initApplication(SDL_Window* window) {
292304 vertexAttributeDescriptions, ARRAY_COUNT (vertexAttributeDescriptions), &vertexInputBinding, 1 , &spriteDescriptorLayout, 0 );
293305
294306
295- VkVertexInputAttributeDescription modelAttributeDescriptions[2 ] = {};
307+ VkVertexInputAttributeDescription modelAttributeDescriptions[3 ] = {};
296308 modelAttributeDescriptions[0 ].binding = 0 ;
297309 modelAttributeDescriptions[0 ].location = 0 ;
298310 modelAttributeDescriptions[0 ].format = VK_FORMAT_R32G32B32_SFLOAT;
299311 modelAttributeDescriptions[0 ].offset = 0 ;
300312 modelAttributeDescriptions[1 ].binding = 0 ;
301313 modelAttributeDescriptions[1 ].location = 1 ;
302314 modelAttributeDescriptions[1 ].format = VK_FORMAT_R32G32B32_SFLOAT;
303- modelAttributeDescriptions[1 ].offset = 0 ;
315+ modelAttributeDescriptions[1 ].offset = sizeof (float ) * 3 ;
316+ modelAttributeDescriptions[2 ].binding = 0 ;
317+ modelAttributeDescriptions[2 ].location = 2 ;
318+ modelAttributeDescriptions[2 ].format = VK_FORMAT_R32G32_SFLOAT;
319+ modelAttributeDescriptions[2 ].offset = sizeof (float ) * 6 ;
304320 VkVertexInputBindingDescription modelInputBinding = {};
305321 modelInputBinding.binding = 0 ;
306322 modelInputBinding.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
307- modelInputBinding.stride = sizeof (float ) * 6 ;
323+ modelInputBinding.stride = sizeof (float ) * 8 ;
308324 modelPipeline = createPipeline (context, " ../shaders/model_vert.spv" , " ../shaders/model_frag.spv" , renderPass, swapchain.width , swapchain.height ,
309325 modelAttributeDescriptions, ARRAY_COUNT (modelAttributeDescriptions), &modelInputBinding, 1 , &modelDescriptorSetLayout, 0 );
310326
@@ -339,8 +355,6 @@ void initApplication(SDL_Window* window) {
339355 createBuffer (context, &spriteIndexBuffer, sizeof (indexData), VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
340356 uploadDataToBuffer (context, &spriteIndexBuffer, indexData, sizeof (indexData));
341357
342- model = createModel (context, " ../data/models/monkey.glb" );
343-
344358 { // Init camera
345359 camera.cameraPosition = glm::vec3 (0 .0f );
346360 camera.cameraDirection = glm::vec3 (0 .0f , 0 .0f , 1 .0f );
@@ -449,7 +463,7 @@ void renderApplication() {
449463 vkCmdDrawIndexed(commandBuffer, ARRAY_COUNT(indexData), 1, 0, 0, 0);
450464#else
451465 glm::mat4 translationMatrix = glm::translate (glm::mat4 (1 .0f ), glm::vec3 (0 .0f , 0 .0f , 3 .0f ));
452- glm::mat4 scaleMatrix = glm::scale (glm::mat4 (1 .0f ), glm::vec3 (1 .0f ));
466+ glm::mat4 scaleMatrix = glm::scale (glm::mat4 (1 .0f ), glm::vec3 (100 .0f ));
453467 glm::mat4 rotationMatrix = glm::rotate (glm::mat4 (1 .0f ), -time, glm::vec3 (0 .0f , 1 .0f , 0 .0f ));
454468 glm::mat4 modelMatrix = translationMatrix * scaleMatrix * rotationMatrix;
455469
0 commit comments