parent
9136eaa54f
commit
805f633af0
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
@ -0,0 +1,53 @@ |
|||||||
|
#include <SDL2/SDL.h> |
||||||
|
#include <GL/glew.h> |
||||||
|
#include <SDL2/SDL_opengl.h> |
||||||
|
|
||||||
|
|
||||||
|
#define GLSL_VERT_SHADER "vertex.glsl" |
||||||
|
#define GLSL_FRAG_SHADER "fragment.glsl" |
||||||
|
#define PACKED __attribute__((packed)) |
||||||
|
|
||||||
|
|
||||||
|
struct { |
||||||
|
SDL_Window *w; |
||||||
|
SDL_GLContext *gl; |
||||||
|
GLuint gl_vertbuffer; |
||||||
|
GLuint gl_program; |
||||||
|
GLuint font_texture; |
||||||
|
} ren = {0}; |
||||||
|
|
||||||
|
|
||||||
|
typedef struct PACKED { |
||||||
|
union { GLint x, u; }; |
||||||
|
union { GLint y, v; }; |
||||||
|
} vec2_i; |
||||||
|
|
||||||
|
typedef struct PACKED { |
||||||
|
union { GLint x, r; }; |
||||||
|
union { GLint y, g; }; |
||||||
|
union { GLint z, b; }; |
||||||
|
union { GLint w, a; }; |
||||||
|
} vec4_i; |
||||||
|
|
||||||
|
// textured vertex
|
||||||
|
struct PACKED v_text { |
||||||
|
vec2_i pos; |
||||||
|
vec2_i uv; |
||||||
|
}; |
||||||
|
|
||||||
|
// colored vertex
|
||||||
|
struct PACKED v_col { |
||||||
|
vec2_i pos; |
||||||
|
vec2_i col; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
// different stacks
|
||||||
|
#define _STACK_NAME vtstack |
||||||
|
#define _STACK_TYPE struct v_text |
||||||
|
#include "stack.h" |
||||||
|
#undef _STACK_NAME |
||||||
|
#undef _STACK_TYPE |
||||||
|
#define _STACK_NAME vcstack |
||||||
|
#define _STACK_TYPE struct v_col |
||||||
|
#include "stack.h" |
@ -0,0 +1,61 @@ |
|||||||
|
#ifdef _STACK_TYPE |
||||||
|
#ifdef _STACK_NAME |
||||||
|
|
||||||
|
|
||||||
|
#ifndef _STACK_REALLOC |
||||||
|
#define _STACK_REALLOC(p, s) realloc(p,s) |
||||||
|
#endif |
||||||
|
#ifndef _STACK_MEMSET |
||||||
|
#define _STACK_MEMSET(p, c, s) memset(p,c,s) |
||||||
|
#endif |
||||||
|
#ifndef _STACK_STEP |
||||||
|
#define _STACK_STEP 8 |
||||||
|
#endif |
||||||
|
#ifndef _STACK_CAT |
||||||
|
#define _STACK_CAT_I(a,b) a ## b |
||||||
|
#define _STACK_CAT(a,b) _STACK_CAT_I(a,b) |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
// TODO: add a rolling hash
|
||||||
|
struct _STACK_NAME { |
||||||
|
_STACK_TYPE *items; |
||||||
|
int size, idx; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
int _STACK_CAT(stack_grow_,_STACK_NAME)(struct _STACK_NAME *stack, int step) |
||||||
|
{ |
||||||
|
if (!stack) |
||||||
|
return -1; |
||||||
|
stack->items = _STACK_REALLOC(stack->items, (stack->size+step)*sizeof(_STACK_TYPE)); |
||||||
|
if(!stack->items) |
||||||
|
return -1; |
||||||
|
_STACK_MEMSET(&(stack->items[stack->size]), 0, step*sizeof(*(stack->items))); |
||||||
|
stack->size += step; |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
int _STACK_CAT(stack_push_,_STACK_NAME)(struct _STACK_NAME *stack, _STACK_TYPE *e) |
||||||
|
{ |
||||||
|
if (!stack || !e) |
||||||
|
return -1; |
||||||
|
if (stack->idx >= stack->size) |
||||||
|
if (_STACK_CAT(stack_grow_,_STACK_NAME)(stack, _STACK_STEP)) |
||||||
|
return -1; |
||||||
|
stack->items[stack->idx++] = *e; |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
int _STACK_CAT(stack_clear_,_STACK_NAME)(struct _STACK_NAME *stack) |
||||||
|
{ |
||||||
|
if (!stack) |
||||||
|
return -1; |
||||||
|
stack->idx = 0; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#endif |
||||||
|
#endif |
Binary file not shown.
Loading…
Reference in new issue