graphics api abstraction
[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 }
59 Texture *gfx_create_texture()
60 {
61         switch(api) {
62         case GFX_GL:
63                 return new TextureGL;
64         case GFX_VK:
65                 return new TextureVK;
66         }
67 }
68
69 ShaderProgram *gfx_create_shader_program()
70 {
71         switch(api) {
72         case GFX_GL:
73                 return new ShaderProgramGL;
74         case GFX_VK:
75                 // return new ShaderProgramVK;
76                 return 0;
77         }
78 }
79
80 Shader *gfx_create_shader()
81 {
82         switch(api) {
83         case GFX_GL:
84                 return new ShaderGL;
85         case GFX_VK:
86                 // return new ShaderVK;
87                 return 0;
88         }
89 }
90
91 char *gfx_get_shader_path()
92 {
93         switch(api) {
94         case GFX_GL:
95                 return (char *)"gl_shaders";
96         case GFX_VK:
97                 return (char *)"vk_shaders";
98         }
99 }