mirror of
https://git.shylie.info/shylie/glerminal.git
synced 2025-02-07 11:20:11 +00:00
Allow cell size configuration
This commit is contained in:
parent
5fbeb1e4e9
commit
365cad551b
@ -11,6 +11,7 @@ set(GLERMINAL_GRID_WIDTH 40 CACHE STRING "")
|
||||
set(GLERMINAL_GRID_HEIGHT 25 CACHE STRING "")
|
||||
set(GLERMINAL_LAYER_COUNT 64 CACHE STRING "")
|
||||
set(GLERMINAL_CELL_SCALE 4 CACHE STRING "")
|
||||
set(GLERMINAL_CELL_SIZE 8 CACHE STRING "")
|
||||
|
||||
configure_file(source/glerminal-config.h.in glerminal-config.h @ONLY)
|
||||
|
||||
|
@ -16,7 +16,8 @@ enum
|
||||
GRID_WIDTH = @GLERMINAL_GRID_WIDTH@,
|
||||
GRID_HEIGHT = @GLERMINAL_GRID_HEIGHT@,
|
||||
LAYER_COUNT = @GLERMINAL_LAYER_COUNT@,
|
||||
CELL_SCALE = @GLERMINAL_CELL_SCALE@
|
||||
CELL_SCALE = @GLERMINAL_CELL_SCALE@,
|
||||
CELL_SIZE = @GLERMINAL_CELL_SIZE@
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -9,20 +9,18 @@
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <stdexcept>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
namespace glerminal
|
||||
{
|
||||
constexpr unsigned int CELL_SIZE = 8;
|
||||
constexpr unsigned int MAX_SPRITES_ROW = 64;
|
||||
constexpr unsigned int MAX_SPRITES = MAX_SPRITES_ROW * MAX_SPRITES_ROW;
|
||||
constexpr unsigned int GRID_WIDTH = ::GRID_WIDTH;
|
||||
constexpr unsigned int GRID_HEIGHT = ::GRID_HEIGHT;
|
||||
constexpr unsigned int LAYER_COUNT = ::LAYER_COUNT;
|
||||
constexpr unsigned int CELL_SCALE = ::CELL_SCALE;
|
||||
constexpr unsigned int CELL_SIZE = ::CELL_SIZE;
|
||||
constexpr unsigned int GRID_AREA = GRID_WIDTH * GRID_HEIGHT;
|
||||
constexpr unsigned int SCREEN_WIDTH = GRID_WIDTH * CELL_SIZE * CELL_SCALE;
|
||||
constexpr unsigned int SCREEN_HEIGHT = GRID_HEIGHT * CELL_SIZE * CELL_SCALE;
|
||||
|
@ -8,6 +8,7 @@
|
||||
#define LAYERS_UNIFORM_NAME "layers"
|
||||
#define LAYER_COUNT_UNIFORM_NAME "layer_count"
|
||||
#define ATLAS_WIDTH_UNIFORM_NAME "atlas_width"
|
||||
#define CELL_SIZE_UNIFORM_NAME "cell_size"
|
||||
|
||||
namespace
|
||||
{
|
||||
@ -33,6 +34,7 @@ namespace
|
||||
"layout (location = 2) in int sprite;\n"
|
||||
"layout (location = 3) in vec4 color;\n"
|
||||
"layout (location = 4) in float scale;\n"
|
||||
"uniform float " CELL_SIZE_UNIFORM_NAME ";\n"
|
||||
"uniform vec4 " GRID_SIZE_UNIFORM_NAME ";\n"
|
||||
"uniform int " ATLAS_WIDTH_UNIFORM_NAME ";\n"
|
||||
"out VS_OUT {\n"
|
||||
@ -48,7 +50,7 @@ namespace
|
||||
" vs_out.sprite = sprite;\n"
|
||||
" vs_out.layer = layer;\n"
|
||||
" vs_out.layer_color = color;\n"
|
||||
" vs_out.texcoord = vec2(sprite % " ATLAS_WIDTH_UNIFORM_NAME " + position.x + 1, (sprite / " ATLAS_WIDTH_UNIFORM_NAME ") - position.y) / vec2(" ATLAS_WIDTH_UNIFORM_NAME ") + vec2(-(2 * position.x + 1) * " GRID_SIZE_UNIFORM_NAME ".z / 16, (2 * position.y + 1) * " GRID_SIZE_UNIFORM_NAME ".z / 16);\n"
|
||||
" vs_out.texcoord = vec2(sprite % " ATLAS_WIDTH_UNIFORM_NAME " + position.x + 1, (sprite / " ATLAS_WIDTH_UNIFORM_NAME ") - position.y) / vec2(" ATLAS_WIDTH_UNIFORM_NAME ") + vec2(-(2 * position.x + 1) * " GRID_SIZE_UNIFORM_NAME ".z / (2 * " CELL_SIZE_UNIFORM_NAME "), (2 * position.y + 1) * " GRID_SIZE_UNIFORM_NAME ".z / (2 * " CELL_SIZE_UNIFORM_NAME "));\n"
|
||||
" vec2 cell_position = vec2(scale + (gl_InstanceID % int(" GRID_SIZE_UNIFORM_NAME ".y)) - " GRID_SIZE_UNIFORM_NAME ".x * floor((gl_InstanceID % int(" GRID_SIZE_UNIFORM_NAME ".y)) / " GRID_SIZE_UNIFORM_NAME ".x), -floor((gl_InstanceID % int(" GRID_SIZE_UNIFORM_NAME ".y)) / " GRID_SIZE_UNIFORM_NAME ".x));\n"
|
||||
" vec2 temp = ((position + vec2(-0.5, 0.5)) * scale + cell_position + vec2(-0.5, 0.5)) * " GRID_SIZE_UNIFORM_NAME ".zw * 2 + vec2(-1, 1);\n"
|
||||
" gl_Position = vec4(scaled_offset.x + temp.x, scaled_offset.y - temp.y, 0, 1);\n"
|
||||
@ -64,6 +66,7 @@ namespace
|
||||
"layout (location = 2) in int sprite;\n"
|
||||
"layout (location = 3) in vec4 color;\n"
|
||||
"layout (location = 4) in float scale;\n"
|
||||
"uniform float " CELL_SIZE_UNIFORM_NAME ";\n"
|
||||
"uniform vec4 " GRID_SIZE_UNIFORM_NAME ";\n"
|
||||
"uniform int " ATLAS_WIDTH_UNIFORM_NAME ";\n"
|
||||
"out VS_OUT {\n"
|
||||
@ -77,7 +80,7 @@ namespace
|
||||
" gl_Layer = layer;\n"
|
||||
" vec2 scaled_offset = 2 * offset * " GRID_SIZE_UNIFORM_NAME ".zw;\n"
|
||||
" vs_out.sprite = sprite;\n"
|
||||
" vs_out.texcoord = vec2(sprite % " ATLAS_WIDTH_UNIFORM_NAME " + position.x + 1, (sprite / " ATLAS_WIDTH_UNIFORM_NAME ") - position.y) / vec2(" ATLAS_WIDTH_UNIFORM_NAME ") + vec2(-(2 * position.x + 1) * " GRID_SIZE_UNIFORM_NAME ".z / 16, (2 * position.y + 1) * " GRID_SIZE_UNIFORM_NAME ".z / 16);\n"
|
||||
" vs_out.texcoord = vec2(sprite % " ATLAS_WIDTH_UNIFORM_NAME " + position.x + 1, (sprite / " ATLAS_WIDTH_UNIFORM_NAME ") - position.y) / vec2(" ATLAS_WIDTH_UNIFORM_NAME ") + vec2(-(2 * position.x + 1) * " GRID_SIZE_UNIFORM_NAME ".z / (2 * " CELL_SIZE_UNIFORM_NAME "), (2 * position.y + 1) * " GRID_SIZE_UNIFORM_NAME ".z / (2 * " CELL_SIZE_UNIFORM_NAME "));\n"
|
||||
" vs_out.layer_color = color;\n"
|
||||
" vec2 cell_position = vec2(scale + (gl_InstanceID % int(" GRID_SIZE_UNIFORM_NAME ".y)) - " GRID_SIZE_UNIFORM_NAME ".x * floor((gl_InstanceID % int(" GRID_SIZE_UNIFORM_NAME ".y)) / " GRID_SIZE_UNIFORM_NAME ".x), -floor((gl_InstanceID % int(" GRID_SIZE_UNIFORM_NAME ".y)) / " GRID_SIZE_UNIFORM_NAME ".x));\n"
|
||||
" vec2 temp = ((position + vec2(-0.5, 0.5)) * scale + cell_position + vec2(-0.5, 0.5)) * " GRID_SIZE_UNIFORM_NAME ".zw * 2 + vec2(-1, 1);\n"
|
||||
@ -654,6 +657,7 @@ namespace glerminal
|
||||
|
||||
// setup uniforms
|
||||
glUseProgram(m_program);
|
||||
glUniform1f(glGetUniformLocation(m_program, CELL_SIZE_UNIFORM_NAME), CELL_SIZE);
|
||||
glUniform4f(glGetUniformLocation(m_program, GRID_SIZE_UNIFORM_NAME), GRID_WIDTH + 2, GRID_AREA_2, 1.0f / GRID_WIDTH, 1.0f / GRID_HEIGHT);
|
||||
glUniform1i(glGetUniformLocation(m_program, ATLAS_WIDTH_UNIFORM_NAME), MAX_SPRITES_ROW);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user