3bda079755fbaf7ad01c8924afe0052066a8c14c
[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
10 #include "vulkan/mesh-vk.h"
11 #include "vulkan/texture-vk.h"
12
13 static Gfx_API api;
14
15 void (*gfx_clear)(float r, float g, float b);
16 void (*gfx_viewport)(int x, int y, int width, int height);
17
18
19 bool gfx_init(Gfx_API api)
20 {
21         switch(api) {
22         case GFX_GL:
23                 if(!init_opengl())
24                         return false;
25                 break;
26         case GFX_VK:
27                 if(!init_vulkan())
28                         return false;
29                 break;
30         default:
31                 return false;
32         }
33
34         ::api = api;
35         return true;
36 }
37
38 void gfx_cleanup()
39 {
40         switch(api) {
41         case GFX_GL:
42                 cleanup_opengl();
43                 break;
44         case GFX_VK:
45                 cleanup_vulkan();
46                 break;
47         }
48 }
49
50 Mesh *gfx_create_mesh()
51 {
52         switch(api) {
53         case GFX_GL:
54                 return new MeshGL;
55         case GFX_VK:
56                 return new MeshVK;
57         }
58         return 0;
59 }
60 Texture *gfx_create_texture()
61 {
62         switch(api) {
63         case GFX_GL:
64                 return new TextureGL;
65         case GFX_VK:
66                 return new TextureVK;
67         }
68         return 0;
69 }
70
71 ShaderProgram *gfx_create_shader_program()
72 {
73         switch(api) {
74         case GFX_GL:
75                 return new ShaderProgramGL;
76         case GFX_VK:
77                 // return new ShaderProgramVK;
78                 return 0;
79         }
80         return 0;
81 }
82
83 Shader *gfx_create_shader()
84 {
85         switch(api) {
86         case GFX_GL:
87                 return new ShaderGL;
88         case GFX_VK:
89                 // return new ShaderVK;
90                 return 0;
91         }
92         return 0;
93 }
94
95 char *gfx_get_shader_path()
96 {
97         switch(api) {
98         case GFX_GL:
99                 return (char *)"gl_shaders";
100         case GFX_VK:
101                 return (char *)"vk_shaders";
102         }
103         return (char *)"";
104 }