skybox working
[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 void (*gfx_zbuffer)(bool enable);
18 void (*gfx_cull_face)(Gfx_cull_face cf);
19
20
21 bool gfx_init(Gfx_API api)
22 {
23         switch(api) {
24         case GFX_GL:
25                 if(!init_opengl())
26                         return false;
27                 break;
28         case GFX_VK:
29                 if(!init_vulkan())
30                         return false;
31                 break;
32         default:
33                 return false;
34         }
35
36         ::api = api;
37         return true;
38 }
39
40 void gfx_cleanup()
41 {
42         switch(api) {
43         case GFX_GL:
44                 cleanup_opengl();
45                 break;
46         case GFX_VK:
47                 cleanup_vulkan();
48                 break;
49         }
50 }
51
52 Mesh *gfx_create_mesh()
53 {
54         switch(api) {
55         case GFX_GL:
56                 return new MeshGL;
57         case GFX_VK:
58                 return new MeshVK;
59         }
60         return 0;
61 }
62 Texture *gfx_create_texture()
63 {
64         switch(api) {
65         case GFX_GL:
66                 return new TextureGL;
67         case GFX_VK:
68                 return new TextureVK;
69         }
70         return 0;
71 }
72
73 ShaderProgram *gfx_create_shader_program()
74 {
75         switch(api) {
76         case GFX_GL:
77                 return new ShaderProgramGL;
78         case GFX_VK:
79                 // return new ShaderProgramVK;
80                 return 0;
81         }
82         return 0;
83 }
84
85 Shader *gfx_create_shader()
86 {
87         switch(api) {
88         case GFX_GL:
89                 return new ShaderGL;
90         case GFX_VK:
91                 // return new ShaderVK;
92                 return 0;
93         }
94         return 0;
95 }
96
97 char *gfx_get_shader_path()
98 {
99         switch(api) {
100         case GFX_GL:
101                 return (char *)"gl_shaders";
102         case GFX_VK:
103                 return (char *)"vk_shaders";
104         }
105         return (char *)"";
106 }