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