e9f0f7324b10581f51378e5b769126226b413a1c
[demo] / src / gfxapi.cc
1 #include "opengl/opengl.h"
2 #include "vulkan/vk.h"
3
4 #include "gfxapi.h"
5
6 #include "opengl/mesh-gl.h"
7 #include "opengl/texture-gl.h"
8 #include "opengl/shader-gl.h"
9 #include "opengl/uniforms-gl.h"
10
11 #include "vulkan/shader-vk.h"
12 #include "vulkan/mesh-vk.h"
13 #include "vulkan/texture-vk.h"
14 #include "vulkan/uniforms-vk.h"
15
16 static Gfx_API api;
17
18 void (*gfx_clear)(float r, float g, float b);
19 void (*gfx_viewport)(int x, int y, int width, int height);
20 void (*gfx_zbuffer)(bool enable);
21 void (*gfx_cull_face)(Gfx_cull_face cf);
22 void (*gfx_reshape)(int width, int height);
23 void (*gfx_wireframe)(bool enable);
24 void (*gfx_swapbuffers)();
25 void (*gfx_begin_drawing)();
26 void (*gfx_end_drawing)();
27
28 bool gfx_init(Gfx_API api)
29 {
30         switch(api) {
31         case GFX_GL:
32                 if(!init_opengl())
33                         return false;
34                 break;
35         case GFX_VK:
36                 if(!init_vulkan())
37                         return false;
38                 break;
39         default:
40                 return false;
41         }
42
43         ::api = api;
44         return true;
45 }
46
47 void gfx_cleanup()
48 {
49         switch(api) {
50         case GFX_GL:
51                 cleanup_opengl();
52                 break;
53         case GFX_VK:
54                 cleanup_vulkan();
55                 break;
56         }
57 }
58
59 Mesh *gfx_create_mesh()
60 {
61         switch(api) {
62         case GFX_GL:
63                 return new MeshGL;
64         case GFX_VK:
65                 return new MeshVK;
66         }
67         return 0;
68 }
69 Texture *gfx_create_texture()
70 {
71         switch(api) {
72         case GFX_GL:
73                 return new TextureGL;
74         case GFX_VK:
75                 return new TextureVK;
76         }
77         return 0;
78 }
79
80 ShaderProgram *gfx_create_shader_program()
81 {
82         switch(api) {
83         case GFX_GL:
84                 return new ShaderProgramGL;
85         case GFX_VK:
86                 return new ShaderProgramVK;
87         }
88         return 0;
89 }
90
91 Shader *gfx_create_shader()
92 {
93         switch(api) {
94         case GFX_GL:
95                 return new ShaderGL;
96         case GFX_VK:
97                 return new ShaderVK;
98         }
99         return 0;
100 }
101
102 UniformBuffer *gfx_create_uniform_buffer()
103 {
104         switch(api) {
105         case GFX_GL:
106                 return new UniformBufferGL;
107         case GFX_VK:
108                 return new UniformBufferVK;
109         }
110         return 0;
111 }
112
113 char *gfx_get_shader_path()
114 {
115         switch(api) {
116         case GFX_GL:
117                 return (char *)"gl_shaders";
118         case GFX_VK:
119                 return (char *)"vk_shaders/spirv";
120         }
121         return (char *)"";
122 }