cbaa950a7d91a5d73f7cc62804fae7ca5b220f0e
[demo] / src / vulkan / renderer-vk.cc
1 #include <vulkan/vulkan.h>
2 #include <stdio.h>
3
4 #include "gfxapi.h"
5 #include "renderer-vk.h"
6 #include "uniforms.h"
7 #include "vkutil.h"
8 #include "vkutil-pipeline.h"
9
10 static VkuPipelineGenerator pipe_gen;
11
12 RendererVK::RendererVK()
13 {
14         scene = 0;
15         camera = 0;
16         sprog = 0;
17
18         skytex = 0;
19         dskytex = 0;
20
21         fog_density = 0;
22
23         default_vs_ub = 0;
24         default_fs_ub = 0;
25         sky_vs_ub = 0;
26 }
27
28 RendererVK::~RendererVK()
29 {
30         delete default_vs_ub;
31         delete default_fs_ub;
32         delete sky_vs_ub;
33 }
34
35 bool RendererVK::create_resources()
36 {
37         /* default pipeline: create binding points */
38         default_vs_ub = gfx_create_uniform_buffer();
39         if(!default_vs_ub->create(sizeof default_vs_uniforms)) {
40                 fprintf(stderr, "Failed to create the default VS uniform buffer.\n");
41                 return false;
42         }
43         ResourceVK default_vs_res;
44         if(!default_vs_res.create_ds_layout(MATRIX_UNIFORMS,
45                                             VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
46                                             VK_SHADER_STAGE_VERTEX_BIT, 0)) {
47                 fprintf(stderr, "Failed to create the ds layout for the default vs uniform buffer.\n");
48                 return false;
49         }
50         default_resources.push_back(default_vs_res);
51
52         default_fs_ub = gfx_create_uniform_buffer();
53         if(!default_fs_ub->create(sizeof default_fs_uniforms)) {
54                 fprintf(stderr, "Failed to create the default FS uniform buffer.\n");
55                 return false;
56         }
57         ResourceVK default_fs_res;
58         if(!default_fs_res.create_ds_layout(SHADING_UNIFORMS,
59                                             VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
60                                             VK_SHADER_STAGE_FRAGMENT_BIT, 0)) {
61                 fprintf(stderr, "Failed to create the ds layout for the default VS uniform buffer.\n");
62                 return false;
63         }
64         default_resources.push_back(default_fs_res);
65
66         sky_vs_ub = gfx_create_uniform_buffer();
67         if(!sky_vs_ub->create(sizeof sky_vs_uniforms)) {
68                 fprintf(stderr, "Failed to create the VS uniform buffer for the sky.\n");
69                 return false;
70         }
71         ResourceVK sky_vs_res;
72         if(!sky_vs_res.create_ds_layout(SKY_MATRIX_UNIFORMS,
73                                         VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
74                                         VK_SHADER_STAGE_FRAGMENT_BIT, 0)) {
75                 fprintf(stderr, "Failed to create the ds layout for the sky VS uniform buffer.\n");
76                 return false;
77         }
78         sky_resources.push_back(sky_vs_res);
79
80         return true;
81 }
82
83 bool RendererVK::create()
84 {
85         if(!create_default_pipeline()) {
86                 fprintf(stderr, "Failed to create default pipeline.\n");
87                 return false;
88         }
89
90         /*      if(!create_sky_pipeline()) {
91                         fprintf(stderr, "Failed to create sky pipeline.\n");
92                         return false;
93                 }*/
94
95         return true;
96 }
97
98 bool RendererVK::create_default_pipeline()
99 {
100
101         return true;
102 }