summaryrefslogtreecommitdiff
path: root/src/renderer/backends/opengl/backend_opengl.h
blob: 9cfbb068fc9b7336c99cf19bc769c867e879b8b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#pragma once

#ifdef CEL_REND_BACKEND_OPENGL

#include "defines.h"
#include "maths_types.h"
#include "ral.h"
#include "ral_types.h"

#define MAX_PIPELINE_UNIFORM_BUFFERS 32

#define OPENGL_DEFAULT_FRAMEBUFFER 0

typedef struct gpu_swapchain {
  u32x2 dimensions;
} gpu_swapchain;
typedef struct gpu_device {
} gpu_device;
typedef struct gpu_pipeline_layout {
  void *pad
} gpu_pipeline_layout;
typedef struct gpu_pipeline {
  u32 shader_id;
  vertex_description vertex_desc;
  buffer_handle uniform_bindings[MAX_PIPELINE_UNIFORM_BUFFERS];
  bool wireframe;
} gpu_pipeline;
typedef struct gpu_renderpass {
  u32 fbo;
  gpu_renderpass_desc description;
  void *pad;
} gpu_renderpass;
typedef struct gpu_cmd_encoder {
  gpu_pipeline *pipeline;
} gpu_cmd_encoder;  // Recording
typedef struct gpu_cmd_buffer {
  void *pad;
} gpu_cmd_buffer;  // Ready for submission

typedef struct gpu_buffer {
  union {
    u32 vbo;
    u32 ibo;
    u32 ubo;
  } id;
  union {
    u32 vao;
    u32 ubo_binding_point
  }; // Optional
  u64 size;
} gpu_buffer;
typedef struct gpu_texture {
  u32 id;
  void* pad;
} gpu_texture;

typedef struct opengl_support {
} opengl_support;

u32 shader_create_separate(const char *vert_shader, const char *frag_shader);

void uniform_vec3f(u32 program_id, const char *uniform_name, vec3 *value);
void uniform_f32(u32 program_id, const char *uniform_name, f32 value);
void uniform_i32(u32 program_id, const char *uniform_name, i32 value);
void uniform_mat4f(u32 program_id, const char *uniform_name, mat4 *value);
#endif