Map stuff some more, about to do more packing stuff
This commit is contained in:
@ -17,8 +17,14 @@ void overworldInit() {
|
|||||||
// Test
|
// Test
|
||||||
OVERWORLD.mapWidth = 16;
|
OVERWORLD.mapWidth = 16;
|
||||||
OVERWORLD.mapHeight = 16;
|
OVERWORLD.mapHeight = 16;
|
||||||
|
OVERWORLD.mapLayerCount = 2;
|
||||||
|
|
||||||
|
memset(&OVERWORLD.tileIds, 0x01, sizeof(OVERWORLD.tileIds));
|
||||||
|
|
||||||
assertTrue(
|
assertTrue(
|
||||||
OVERWORLD.mapWidth * OVERWORLD.mapHeight <= OVERWORLD_TILE_COUNT_MAX,
|
(
|
||||||
|
OVERWORLD.mapWidth * OVERWORLD.mapHeight * OVERWORLD.mapLayerCount
|
||||||
|
) <= OVERWORLD_TILE_COUNT_MAX,
|
||||||
"Map size exceeds tile count."
|
"Map size exceeds tile count."
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ typedef struct {
|
|||||||
|
|
||||||
tileid_t tileIds[OVERWORLD_TILE_COUNT_MAX];
|
tileid_t tileIds[OVERWORLD_TILE_COUNT_MAX];
|
||||||
tiledata_t tileData[OVERWORLD_TILE_COUNT_MAX];
|
tiledata_t tileData[OVERWORLD_TILE_COUNT_MAX];
|
||||||
uint8_t mapWidth, mapHeight;
|
uint8_t mapWidth, mapHeight, mapLayerCount;
|
||||||
} overworld_t;
|
} overworld_t;
|
||||||
|
|
||||||
extern overworld_t OVERWORLD;
|
extern overworld_t OVERWORLD;
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
#define OVERWORLD_ENTITY_WIDTH 32
|
#define OVERWORLD_ENTITY_WIDTH 32
|
||||||
#define OVERWORLD_ENTITY_HEIGHT 32
|
#define OVERWORLD_ENTITY_HEIGHT 32
|
||||||
|
|
||||||
#define OVERWORLD_TILE_COUNT_MAX 256
|
#define OVERWORLD_TILE_LAYER_COUNT_MAX 2
|
||||||
|
#define OVERWORLD_TILE_COUNT_PER_LAYER 256
|
||||||
|
#define OVERWORLD_TILE_COUNT_MAX (OVERWORLD_TILE_COUNT_PER_LAYER * OVERWORLD_TILE_LAYER_COUNT_MAX)
|
||||||
#define OVERWORLD_TILE_WIDTH OVERWORLD_ENTITY_WIDTH
|
#define OVERWORLD_TILE_WIDTH OVERWORLD_ENTITY_WIDTH
|
||||||
#define OVERWORLD_TILE_HEIGHT OVERWORLD_ENTITY_HEIGHT
|
#define OVERWORLD_TILE_HEIGHT OVERWORLD_ENTITY_HEIGHT
|
@ -13,3 +13,5 @@ typedef uint8_t tileid_t;
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t nothing;
|
uint32_t nothing;
|
||||||
} tiledata_t;
|
} tiledata_t;
|
||||||
|
|
||||||
|
#define TILE_ID_NULL 0
|
@ -21,6 +21,12 @@ void renderInit() {
|
|||||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
assertNoGLError();
|
assertNoGLError();
|
||||||
|
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
assertNoGLError();
|
||||||
|
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
assertNoGLError();
|
||||||
|
|
||||||
shaderManagerInit();
|
shaderManagerInit();
|
||||||
quadInit();
|
quadInit();
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,9 @@ void mapUpdate() {
|
|||||||
memoryCopyRangeSafe(
|
memoryCopyRangeSafe(
|
||||||
&MAP_DATA.tileIds,
|
&MAP_DATA.tileIds,
|
||||||
&OVERWORLD.tileIds[0],
|
&OVERWORLD.tileIds[0],
|
||||||
&OVERWORLD.tileIds[OVERWORLD.mapWidth * OVERWORLD.mapHeight],
|
&OVERWORLD.tileIds[
|
||||||
|
OVERWORLD.mapWidth * OVERWORLD.mapHeight * OVERWORLD.mapLayerCount
|
||||||
|
],
|
||||||
sizeof(MAP_DATA.tileIds)
|
sizeof(MAP_DATA.tileIds)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -35,7 +37,7 @@ void mapUpdate() {
|
|||||||
memoryCopyRangeSafe(
|
memoryCopyRangeSafe(
|
||||||
&MAP_DATA.mapSize,
|
&MAP_DATA.mapSize,
|
||||||
&OVERWORLD.mapWidth,
|
&OVERWORLD.mapWidth,
|
||||||
&OVERWORLD.mapHeight + sizeof(uint8_t),
|
&OVERWORLD.mapLayerCount + sizeof(uint8_t),
|
||||||
sizeof(MAP_DATA.mapSize)
|
sizeof(MAP_DATA.mapSize)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -22,13 +22,25 @@ vec2 mapGetVertice(uint instanceIndex, uint indiceIndex) {
|
|||||||
|
|
||||||
uint mapWidth = packedGetU8(0u, mapSize);
|
uint mapWidth = packedGetU8(0u, mapSize);
|
||||||
uint mapHeight = packedGetU8(1u, mapSize);
|
uint mapHeight = packedGetU8(1u, mapSize);
|
||||||
|
uint mapLayerCount = packedGetU8(2u, mapSize);
|
||||||
|
|
||||||
quad += vec2(
|
// Get x and y within layer
|
||||||
float(instanceIndex % mapWidth),
|
uint x = instanceIndex % mapWidth;
|
||||||
float(instanceIndex / mapWidth)
|
uint y = (instanceIndex / mapWidth) % mapHeight;
|
||||||
);
|
|
||||||
|
|
||||||
|
// Get quad position, consider layer count
|
||||||
|
quad += vec2(x, y);
|
||||||
quad *= mapTileGetSize();
|
quad *= mapTileGetSize();
|
||||||
|
|
||||||
return quad;
|
return quad;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint mapGetLayer(uint instanceIndex) {
|
||||||
|
uint mapWidth = packedGetU8(0u, mapSize);
|
||||||
|
uint mapHeight = packedGetU8(1u, mapSize);
|
||||||
|
return instanceIndex / (mapWidth * mapHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint mapGetTileId(uint instanceIndex) {
|
||||||
|
|
||||||
|
}
|
@ -15,7 +15,7 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
uvec4_t tileIds[OVERWORLD_TILE_COUNT_MAX / MAP_TILE_PACK_SIZE];
|
uvec4_t tileIds[OVERWORLD_TILE_COUNT_MAX / MAP_TILE_PACK_SIZE];
|
||||||
uint_t mapSize;
|
uint_t mapSize;
|
||||||
uvec3_t _padding0;
|
uvec3_t _p0;
|
||||||
} mapdata_t;
|
} mapdata_t;
|
||||||
|
|
||||||
extern shaderbuffer_t MAP_BUFFER;
|
extern shaderbuffer_t MAP_BUFFER;
|
||||||
|
@ -35,8 +35,8 @@ void transformsUpdate() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
glm_lookat(
|
glm_lookat(
|
||||||
(vec3){ 300, 300, 300 },
|
(vec3){ 0, 0, 300 },
|
||||||
(vec3){ 0, 0, 0 },
|
(vec3){ 0, 32, 0 },
|
||||||
(vec3){ 0, 1, 0 },
|
(vec3){ 0, 1, 0 },
|
||||||
TRANSFORMS_DATA.view
|
TRANSFORMS_DATA.view
|
||||||
);
|
);
|
||||||
|
@ -4,13 +4,24 @@
|
|||||||
// https://opensource.org/licenses/MIT
|
// https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
#include "../fragments/header.glsl"
|
#include "../fragments/header.glsl"
|
||||||
|
#include "../data/map.glsl"
|
||||||
|
|
||||||
// Inputs from vertex shader
|
// Inputs from vertex shader
|
||||||
in vec2 v_TextureCoord;
|
in vec2 v_TextureCoord;
|
||||||
|
flat in uint v_InstanceIndex;
|
||||||
|
flat in uint v_IndiceIndex;
|
||||||
|
|
||||||
// Frag pixel color
|
// Frag pixel color
|
||||||
out vec4 FragColor;
|
out vec4 FragColor;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
FragColor = vec4(1, 0, 0, 1);
|
uint layer = mapGetLayer(v_InstanceIndex);
|
||||||
|
|
||||||
|
if(layer == 0u) {
|
||||||
|
FragColor = vec4(1, 0, 0, 0.5);
|
||||||
|
} else {
|
||||||
|
FragColor = vec4(0, 1, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
// FragColor = vec4(1, 0, 0, 1);
|
||||||
}
|
}
|
@ -9,14 +9,20 @@
|
|||||||
|
|
||||||
// Outputs to fragment shader
|
// Outputs to fragment shader
|
||||||
out vec2 v_TextureCoord;
|
out vec2 v_TextureCoord;
|
||||||
|
flat out uint v_InstanceIndex;
|
||||||
|
flat out uint v_IndiceIndex;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
uint instanceIndex = uint(gl_InstanceID);
|
uint instanceIndex = uint(gl_InstanceID);
|
||||||
uint indiceIndex = quadGetIndiceIndex(gl_VertexID);
|
uint indiceIndex = quadGetIndiceIndex(gl_VertexID);
|
||||||
|
|
||||||
|
uint layer = mapGetLayer(instanceIndex);
|
||||||
vec2 vert = mapGetVertice(instanceIndex, indiceIndex);
|
vec2 vert = mapGetVertice(instanceIndex, indiceIndex);
|
||||||
vec2 uv = quadGetTextureCoordinate(indiceIndex);
|
vec2 uv = quadGetTextureCoordinate(indiceIndex);
|
||||||
|
|
||||||
gl_Position = transforms.projection * transforms.view * vec4(vert, 0.0, 1.0);
|
gl_Position = transforms.projection * transforms.view * vec4(vert, float(layer) * 64.0, 1.0);
|
||||||
|
|
||||||
v_TextureCoord = uv;
|
v_TextureCoord = uv;
|
||||||
|
v_InstanceIndex = instanceIndex;
|
||||||
|
v_IndiceIndex = indiceIndex;
|
||||||
}
|
}
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
void overworldRender() {
|
void overworldRender() {
|
||||||
mapShaderUse();
|
mapShaderUse();
|
||||||
quadRender(OVERWORLD.mapWidth * OVERWORLD.mapHeight);
|
quadRender(OVERWORLD.mapWidth*OVERWORLD.mapHeight*OVERWORLD.mapLayerCount);
|
||||||
|
|
||||||
entityShaderUse();
|
entityShaderUse();
|
||||||
quadRender(OVERWORLD.entityCount);
|
quadRender(OVERWORLD.entityCount);
|
||||||
|
Reference in New Issue
Block a user