libhydride/include/programs.h
2017-11-15 09:29:25 +03:00

71 lines
1.9 KiB
C

/*
* programs.h
*
* Created on: Nov 10, 2017
* Author: nullifiedcat
*/
#pragma once
#include "freetype-gl.h"
#include "vertex-buffer.h"
#include "fontapi.h"
struct draw_cmd;
#define PROGRAM_INIT(name) program_##name##_init
#define PROGRAM_LOAD(name) program_##name##_load
#define PROGRAM_RENDER(name) program_##name##_render
#define PROGRAM_UNLOAD(name) program_##name##_unload
#define PROGRAM_DESTROY(name) program_##name##_destroy
#define DECL_PROGRAM_INIT(name) void program_##name##_init()
#define DECL_PROGRAM_LOAD(name) void program_##name##_load()
#define DECL_PROGRAM_RENDER(name) void program_##name##_render()
#define DECL_PROGRAM_UNLOAD(name) void program_##name##_unload()
#define DECL_PROGRAM_DESTROY(name) void program_##name##_destroy()
#define DECL_PROGRAM(name) \
DECL_PROGRAM_INIT(name); \
DECL_PROGRAM_LOAD(name); \
DECL_PROGRAM_RENDER(name); \
DECL_PROGRAM_UNLOAD(name); \
DECL_PROGRAM_DESTROY(name)
enum
{
PROGRAM_TRIANGLES_PLAIN,
PROGRAM_TRIANGLES_TEXTURED,
PROGRAM_FREETYPE,
PROGRAM_COUNT
};
typedef void(*program_callback_empty_fn)();
struct program_t
{
struct draw_buffer_t *buffer;
GLuint shader;
program_callback_empty_fn init;
program_callback_empty_fn load;
program_callback_empty_fn render;
program_callback_empty_fn unload;
program_callback_empty_fn destroy;
};
void
program_init_inplace(struct program_t *program, const char *vertex_format, const char *shader_frag, const char *shader_vert, program_callback_empty_fn init, program_callback_empty_fn load, program_callback_empty_fn render, program_callback_empty_fn unload, program_callback_empty_fn destroy);
void
program_init_everything();
struct program_t programs[PROGRAM_COUNT];
DECL_PROGRAM(triangles_plain);
DECL_PROGRAM(triangles_textured);
DECL_PROGRAM(freetype);
void
program_freetype_switch_font(xoverlay_font_handle_t font);