Refactor struct part 2.
This commit is contained in:
@ -1,81 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2021 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#include "position.h"
|
||||
|
||||
positiondebug_t positionDebugCreate(
|
||||
primitive_t *debugPrimitive,
|
||||
texture_t *fontTexture, tileset_t *fontTileset
|
||||
) {
|
||||
positiondebug_t debug = {
|
||||
.primitive = debugPrimitive,
|
||||
.textTexture = fontTexture,
|
||||
.textTileset = fontTileset,
|
||||
.x = 0, .y = 0, .z = 0,
|
||||
.pitch = 0, .yaw = 0, .roll = 0,
|
||||
.scaleX = 1, .scaleY = 1, .scaleZ = 1
|
||||
};
|
||||
|
||||
debug.textBatch = spriteBatchCreate(POSITION_DEBUG_FONT_CHARS_MAX);
|
||||
|
||||
return debug;
|
||||
}
|
||||
|
||||
void positionDebugRender(shader_t *shader, positiondebug_t *debug) {
|
||||
float speed = 0.5;
|
||||
|
||||
// Update values.
|
||||
if(inputIsDown(INPUT_DEBUG_FINE)) speed *= 0.1;
|
||||
if(inputIsDown(INPUT_DEBUG_UP)) debug->z -= TIME_STATE.delta * speed;
|
||||
if(inputIsDown(INPUT_DEBUG_DOWN)) debug->z += TIME_STATE.delta * speed;
|
||||
if(inputIsDown(INPUT_DEBUG_LEFT)) debug->x -= TIME_STATE.delta * speed;
|
||||
if(inputIsDown(INPUT_DEBUG_RIGHT)) debug->x += TIME_STATE.delta * speed;
|
||||
if(inputIsDown(INPUT_DEBUG_LOWER)) debug->y -= TIME_STATE.delta * speed;
|
||||
if(inputIsDown(INPUT_DEBUG_RAISE)) debug->y += TIME_STATE.delta * speed;
|
||||
if(inputIsDown(INPUT_DEBUG_MINUS)) {
|
||||
debug->scaleX -= TIME_STATE.delta * speed;
|
||||
debug->scaleY -= TIME_STATE.delta * speed;
|
||||
debug->scaleZ -= TIME_STATE.delta * speed;
|
||||
}
|
||||
if(inputIsDown(INPUT_DEBUG_PLUS)) {
|
||||
debug->scaleX += TIME_STATE.delta * speed;
|
||||
debug->scaleY += TIME_STATE.delta * speed;
|
||||
debug->scaleZ += TIME_STATE.delta * speed;
|
||||
}
|
||||
|
||||
// Render object
|
||||
shaderUsePositionAndScale(shader,
|
||||
debug->x, debug->y, debug->z,
|
||||
mathDeg2Rad(debug->pitch),mathDeg2Rad(debug->yaw),mathDeg2Rad(debug->roll),
|
||||
debug->scaleX, debug->scaleY, debug->scaleZ
|
||||
);
|
||||
primitiveDraw(debug->primitive, 0, -1);
|
||||
|
||||
// Render debug text
|
||||
char text[POSITION_DEBUG_FONT_CHARS_MAX];
|
||||
sprintf(text, "%.2f, %.2f, %.2f\n%.2f, %.2f, %.2f \n%.2f, %.2f, %.2f",
|
||||
debug->x, debug->y, debug->z,
|
||||
debug->pitch, debug->yaw, debug->roll,
|
||||
debug->scaleX, debug->scaleY, debug->scaleZ
|
||||
);
|
||||
|
||||
shaderUseTexture(shader, debug->textTexture);
|
||||
shaderUsePosition(shader,
|
||||
0, 1, 0,
|
||||
mathDeg2Rad(-90), mathDeg2Rad(0), 0
|
||||
);
|
||||
spriteBatchFlush(debug->textBatch);
|
||||
fontSpriteBatchBuffer(debug->textBatch, debug->textTileset, text,
|
||||
FONT_CENTER_X, FONT_CENTER_Y, 0,
|
||||
-1, 0.1
|
||||
);
|
||||
spriteBatchDraw(debug->textBatch, 0, -1);
|
||||
}
|
||||
|
||||
void positionDebugDispose(positiondebug_t *debug) {
|
||||
spriteBatchDispose(debug->textBatch);
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2021 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <dawn/dawn.h>
|
||||
#include "../primitive.h"
|
||||
#include "../texture.h"
|
||||
#include "../tileset.h"
|
||||
#include "../gui/font.h"
|
||||
#include "../spritebatch.h"
|
||||
#include "../shader.h"
|
||||
#include "../../input/input.h"
|
||||
|
||||
/**
|
||||
* Creates a position debug tool.
|
||||
*
|
||||
* @param debugPrimitive Primitive to debug
|
||||
* @param fontTexture Font Texture to use for debugging.
|
||||
* @param fontTileset Tileset for for font to use for debugging.
|
||||
* @return Pointer to debug renderer.
|
||||
*/
|
||||
positiondebug_t positionDebugCreate(
|
||||
primitive_t *debugPrimitive,
|
||||
texture_t *fontTexture, tileset_t *fontTileset
|
||||
);
|
||||
|
||||
/**
|
||||
* Render a position debug tool.
|
||||
*
|
||||
* @param shader Shader to use.
|
||||
* @param debug Debug tool to render.
|
||||
*/
|
||||
void positionDebugRender(shader_t *shader, positiondebug_t *debug);
|
||||
|
||||
/**
|
||||
* Dispose a previously created position debug tool.
|
||||
*
|
||||
* @param debug Debug tool to dispose.
|
||||
*/
|
||||
void positionDebugDispose(positiondebug_t *debug);
|
@ -63,5 +63,4 @@ void frameBufferDispose(framebuffer_t *frameBuffer) {
|
||||
glDeleteRenderbuffers(1, &frameBuffer->rboId);
|
||||
glDeleteFramebuffers(1, &frameBuffer->fboId);
|
||||
textureDispose(&frameBuffer->texture);
|
||||
free(frameBuffer);
|
||||
}
|
@ -101,12 +101,11 @@ void cubeBuffer(primitive_t *prim,
|
||||
free(indices);
|
||||
}
|
||||
|
||||
primitive_t * cubeCreate(float w, float h, float d) {
|
||||
primitive_t *cube = primitiveCreate(CUBE_VERTICE_COUNT, CUBE_INDICE_COUNT);
|
||||
cubeBuffer(cube,
|
||||
void cubeInit(primitive_t *primitive, float w, float h, float d) {
|
||||
primitiveInit(primitive, CUBE_VERTICE_COUNT, CUBE_INDICE_COUNT);
|
||||
cubeBuffer(primitive,
|
||||
-w/2, -h/2, -d/2,
|
||||
w, h, d,
|
||||
0, 0
|
||||
);
|
||||
return cube;
|
||||
}
|
@ -31,9 +31,9 @@ void cubeBuffer(primitive_t *primitive,
|
||||
|
||||
/**
|
||||
* Creates a cube primitive of given size.
|
||||
* @param primitive Primitive to create into a cube.
|
||||
* @param w Width of cube.
|
||||
* @param h Height of cube.
|
||||
* @param d Depth of cube.
|
||||
* @return Primitive of the cube.
|
||||
*/
|
||||
primitive_t * cubeCreate(float w, float h, float d);
|
||||
void cubeInit(primitive_t *primitive, float w, float h, float d);
|
@ -42,19 +42,15 @@ void quadBuffer(primitive_t *primitive, float z,
|
||||
free(indices);
|
||||
}
|
||||
|
||||
primitive_t * quadCreate(float z,
|
||||
void quadInit(primitive_t *primitive, float z,
|
||||
float x0, float y0, float u0, float v0,
|
||||
float x1, float y1, float u1, float v1
|
||||
) {
|
||||
primitive_t *primitive = primitiveCreate(
|
||||
QUAD_VERTICE_COUNT, QUAD_INDICE_COUNT
|
||||
);
|
||||
primitiveInit(primitive, QUAD_VERTICE_COUNT, QUAD_INDICE_COUNT);
|
||||
|
||||
quadBuffer(primitive, z,
|
||||
x0, y0, u0, v0,
|
||||
x1, y1, u1, v1,
|
||||
0, 0
|
||||
);
|
||||
|
||||
return primitive;
|
||||
}
|
@ -35,6 +35,7 @@ void quadBuffer(primitive_t *primitive, float z,
|
||||
/**
|
||||
* Creates a new quad primitive.
|
||||
*
|
||||
* @param primitive Primitive to turn into a quad.
|
||||
* @param z The Z axis coordinate of the quad.
|
||||
* @param x0 The X lower coordinate.
|
||||
* @param y0 The Y lower coordinate.
|
||||
@ -44,9 +45,8 @@ void quadBuffer(primitive_t *primitive, float z,
|
||||
* @param y1 The Y higher coordinate.
|
||||
* @param u1 The X higher texture coordinate.
|
||||
* @param v1 The Y higher texture coordinate.
|
||||
* @return The quad primitive.
|
||||
*/
|
||||
primitive_t * quadCreate(float z,
|
||||
void quadInit(primitive_t *primitive, float z,
|
||||
float x0, float y0, float u0, float v0,
|
||||
float x1, float y1, float u1, float v1
|
||||
);
|
@ -7,12 +7,13 @@
|
||||
|
||||
#include "shader.h"
|
||||
|
||||
shader_t * shaderCompile(char *vertexShaderSource, char* fragmentShaderSource) {
|
||||
void shaderCompile(shader_t *shader,
|
||||
char *vertexShaderSource, char* fragmentShaderSource
|
||||
) {
|
||||
int isSuccess, maxLength;
|
||||
char *error;
|
||||
GLuint shaderVertex, shaderFragment, shaderProgram;
|
||||
|
||||
|
||||
// Load the vertex shader first
|
||||
shaderVertex = glCreateShader(GL_VERTEX_SHADER);
|
||||
glShaderSource(shaderVertex, 1, &vertexShaderSource, 0);
|
||||
@ -64,21 +65,14 @@ shader_t * shaderCompile(char *vertexShaderSource, char* fragmentShaderSource) {
|
||||
}
|
||||
|
||||
// Everything is okay, let's create the encapsulated shader.
|
||||
shader_t *shader = malloc(sizeof(shader_t));
|
||||
if(shader == NULL) {
|
||||
glDeleteProgram(shaderProgram);
|
||||
glDeleteShader(shaderVertex);
|
||||
glDeleteShader(shaderFragment);
|
||||
return NULL;
|
||||
}
|
||||
shader->shaderVertex = shaderVertex;
|
||||
shader->shaderFrag = shaderFragment;
|
||||
shader->shaderProgram = shaderProgram;
|
||||
|
||||
shader->uniProj = glGetUniformLocation(shader->shaderProgram, SHADER_UNI_PROJ);
|
||||
shader->uniView = glGetUniformLocation(shader->shaderProgram, SHADER_UNI_VIEW);
|
||||
shader->uniText = glGetUniformLocation(shader->shaderProgram, SHADER_UNI_TEXT);
|
||||
shader->uniModl = glGetUniformLocation(shader->shaderProgram, SHADER_UNI_MODL);
|
||||
shader->uniProj = glGetUniformLocation(shader->shaderProgram,SHADER_UNI_PROJ);
|
||||
shader->uniView = glGetUniformLocation(shader->shaderProgram,SHADER_UNI_VIEW);
|
||||
shader->uniText = glGetUniformLocation(shader->shaderProgram,SHADER_UNI_TEXT);
|
||||
shader->uniModl = glGetUniformLocation(shader->shaderProgram,SHADER_UNI_MODL);
|
||||
|
||||
// Bind the shader
|
||||
shaderUse(shader);
|
||||
@ -90,12 +84,10 @@ shader_t * shaderCompile(char *vertexShaderSource, char* fragmentShaderSource) {
|
||||
return shader;
|
||||
}
|
||||
|
||||
bool shaderDispose(shader_t *shader) {
|
||||
void shaderDispose(shader_t *shader) {
|
||||
glDeleteProgram(shader->shaderProgram);
|
||||
glDeleteShader(shader->shaderVertex);
|
||||
glDeleteShader(shader->shaderFrag);
|
||||
free(shader);
|
||||
return true;
|
||||
}
|
||||
|
||||
void shaderUse(shader_t *shader) {
|
||||
|
@ -9,21 +9,20 @@
|
||||
#include <dawn/dawn.h>
|
||||
|
||||
/**
|
||||
* Create a shader from vertex and fragment shader code.
|
||||
*
|
||||
* Compiles a shader from vertex and fragment shader code.
|
||||
* @param shader Shader to compile into.
|
||||
* @param vertexShaderSource The raw vertex shader code.
|
||||
* @param fragmentShaderSource The raw fragment shader code.
|
||||
* @return Pointer to the loaded shader.
|
||||
*/
|
||||
shader_t * shaderCompile(char *vertexShaderSource, char* fragmentShaderSource);
|
||||
void shaderInit(shader_t *shader,
|
||||
char *vertexShaderSource, char* fragmentShaderSource
|
||||
);
|
||||
|
||||
/**
|
||||
* Cleanup and unload a previously loaded shader.
|
||||
*
|
||||
* @param shader The shader to unload
|
||||
* @return True if successfully disposed.
|
||||
*/
|
||||
bool shaderDispose(shader_t *shader);
|
||||
void shaderDispose(shader_t *shader);
|
||||
|
||||
/**
|
||||
* Attaches the supplied shader as the current shader.
|
||||
@ -49,7 +48,6 @@ void shaderUseTexture(shader_t *shader, texture_t *texture);
|
||||
/**
|
||||
* Set's the current translation matrix onto the shader for the next
|
||||
* render to use. Rotation order is set to YZX.
|
||||
*
|
||||
* @param shader Shader to attach to.
|
||||
* @param x X coordinate (world space).
|
||||
* @param y Y coordinate (world space).
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
#include "tileset.h"
|
||||
|
||||
tileset_t * tilesetInit(tileset_t *tileset,
|
||||
void tilesetInit(tileset_t *tileset,
|
||||
int32_t columns, int32_t rows,
|
||||
int32_t width, int32_t height,
|
||||
int32_t gapX, int32_t gapY,
|
||||
@ -18,10 +18,6 @@ tileset_t * tilesetInit(tileset_t *tileset,
|
||||
|
||||
tileset->count = rows * columns;
|
||||
tileset->divisions = malloc(sizeof(tilesetdiv_t) * tileset->count);
|
||||
if(tileset->divisions == NULL) {
|
||||
free(tileset);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
tileset->columns = columns;
|
||||
tileset->rows = rows;
|
||||
|
Reference in New Issue
Block a user