/** * Copyright (c) 2021 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "grid.h" griddebug_t * gridDebugCreate() { griddebug_t *grid = malloc(sizeof(griddebug_t)); float vertices[GRID_VERTICE_COUNT]; indice_t indices[GRID_INDICE_COUNT]; float overall = GRID_COLUMN_ROWS_SIZE*GRID_COLUMN_ROWS; float off = overall/2.0; int32_t i = 0; for (int32_t y = 0; y <= GRID_COLUMN_ROWS; ++y) { for (int32_t x = 0; x <= GRID_COLUMN_ROWS; ++x) { float fx = ((float)x/(float)GRID_COLUMN_ROWS) * overall; float fy = ((float)y/(float)GRID_COLUMN_ROWS) * overall; vertices[i] = off - fx, vertices[i+1] = 0, vertices[i+2] = off - fy; i += 3; } } i = 0; for (int32_t y = 0; y < GRID_COLUMN_ROWS; ++y) { for (int32_t x = 0; x < GRID_COLUMN_ROWS; ++x) { int row1 = y * (GRID_COLUMN_ROWS+1); int row2 = (y+1) * (GRID_COLUMN_ROWS+1); // Line 0 indices[i+0] = (indice_t)(row1+x); indices[i+1] = (indice_t)(row1+x+1); // Line 1 indices[i+2] = (indice_t)(row1+x+1); indices[i+3] = (indice_t)(row2+x+1); // Line 3 indices[i+4] = (indice_t)(row1+x); indices[i+5] = (indice_t)(row2+x); // Line 4 indices[i+6] = (indice_t)(row2+x); indices[i+7] = (indice_t)(row2+x+1); i += 8; } } glGenBuffers(1, &grid->vertexBuffer); glBindBuffer(GL_ARRAY_BUFFER, grid->vertexBuffer); glBufferData(GL_ARRAY_BUFFER, GRID_VERTICE_COUNT*sizeof(float), vertices, GL_STATIC_DRAW ); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(0); glGenBuffers(1, &grid->indexBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, grid->indexBuffer); glBufferData(GL_ELEMENT_ARRAY_BUFFER, GRID_INDICE_COUNT * sizeof(indice_t), indices, GL_STATIC_DRAW ); return grid; } void gridDebugRender(griddebug_t *grid) { glBindBuffer(GL_ARRAY_BUFFER, grid->vertexBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, grid->indexBuffer); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(0); glDrawElements(GL_LINES, GRID_INDICE_COUNT, GL_UNSIGNED_INT, 0); } void gridDebugDispose(griddebug_t *grid) { free(grid); }