Renderer calculates NDC coordinates from screen coords
This commit is contained in:
@@ -32,14 +32,21 @@ typedef struct TexAtlas
|
||||
v4 texRect[128];
|
||||
} TexAtlas;
|
||||
|
||||
typedef struct Font
|
||||
{
|
||||
TexAtlas *atlas;
|
||||
Texture *tex;
|
||||
v2i codepointRange;
|
||||
v2i charSize;
|
||||
} Font;
|
||||
|
||||
// TODO(doyle): Switch to hash based lookup
|
||||
typedef struct AssetManager
|
||||
{
|
||||
Texture textures[256];
|
||||
TexAtlas texAtlas[256];
|
||||
Shader shaders[256];
|
||||
|
||||
v2i codepointRange;
|
||||
Font font;
|
||||
} AssetManager;
|
||||
|
||||
GLOBAL_VAR AssetManager assetManager;
|
||||
|
||||
@@ -11,6 +11,9 @@ typedef struct Renderer
|
||||
GLuint vao;
|
||||
GLuint vbo;
|
||||
i32 numVertexesInVbo;
|
||||
v2 vertexNdcFactor;
|
||||
v2 size;
|
||||
|
||||
} Renderer;
|
||||
|
||||
typedef struct RenderQuad
|
||||
@@ -24,6 +27,9 @@ void renderer_entity(Renderer *renderer, Entity *entity, f32 rotate,
|
||||
void renderer_object(Renderer *renderer, v2 pos, v2 size, f32 rotate, v3 color,
|
||||
Texture *tex);
|
||||
|
||||
RenderQuad renderer_createQuad(Renderer *renderer, v4 quadRect, v4 texRect,
|
||||
Texture *tex);
|
||||
|
||||
INTERNAL inline void renderer_flipTexCoord(v4 *texCoords, b32 flipX, b32 flipY)
|
||||
{
|
||||
if (flipX)
|
||||
@@ -41,23 +47,12 @@ INTERNAL inline void renderer_flipTexCoord(v4 *texCoords, b32 flipX, b32 flipY)
|
||||
}
|
||||
}
|
||||
|
||||
INTERNAL inline RenderQuad renderer_createQuad(v4 quadRectNdc, v4 texRectNdc)
|
||||
{
|
||||
// NOTE(doyle): Draws a series of triangles (three-sided polygons) using
|
||||
// vertices v0, v1, v2, then v2, v1, v3 (note the order)
|
||||
RenderQuad result = {0};
|
||||
result.vertex[0] = V4(quadRectNdc.x, quadRectNdc.y, texRectNdc.x, texRectNdc.y); // Top left
|
||||
result.vertex[1] = V4(quadRectNdc.x, quadRectNdc.w, texRectNdc.x, texRectNdc.w); // Bottom left
|
||||
result.vertex[2] = V4(quadRectNdc.z, quadRectNdc.y, texRectNdc.z, texRectNdc.y); // Top right
|
||||
result.vertex[3] = V4(quadRectNdc.z, quadRectNdc.w, texRectNdc.z, texRectNdc.w); // Bottom right
|
||||
return result;
|
||||
}
|
||||
|
||||
INTERNAL inline RenderQuad renderer_createDefaultQuad(v4 texRectNdc)
|
||||
INTERNAL inline RenderQuad renderer_createDefaultQuad(Renderer *renderer,
|
||||
v4 texRect, Texture *tex)
|
||||
{
|
||||
RenderQuad result = {0};
|
||||
v4 defaultVertices = V4(0.0f, 1.0f, 1.0f, 0.0f);
|
||||
result = renderer_createQuad(defaultVertices, texRectNdc);
|
||||
v4 defaultQuad = V4(0.0f, renderer->size.h, renderer->size.w, 0.0f);
|
||||
result = renderer_createQuad(renderer, defaultQuad, texRect, tex);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ typedef struct GameState
|
||||
{
|
||||
enum State state;
|
||||
b32 keys[NUM_KEYS];
|
||||
i32 width, height;
|
||||
|
||||
Renderer renderer;
|
||||
i32 heroIndex;
|
||||
@@ -46,6 +45,6 @@ typedef struct GameState
|
||||
AssetManager assetManager;
|
||||
} GameState;
|
||||
|
||||
void worldTraveller_gameInit(GameState *state);
|
||||
void worldTraveller_gameInit(GameState *state, v2i windowSize);
|
||||
void worldTraveller_gameUpdateAndRender(GameState *state, const f32 dt);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user