diff --git a/src/dusk/overworld/overworlddefs.h b/src/dusk/overworld/overworlddefs.h index a9f4c7f..8608033 100644 --- a/src/dusk/overworld/overworlddefs.h +++ b/src/dusk/overworld/overworlddefs.h @@ -5,7 +5,7 @@ * https://opensource.org/licenses/MIT */ -#define OVERWORLD_ENTITY_COUNT_MAX 32 +#define OVERWORLD_ENTITY_COUNT_MAX 8 #define OVERWORLD_ENTITY_WIDTH 32 #define OVERWORLD_ENTITY_HEIGHT 32 diff --git a/src/duskgl/display/shader/data/entities.c b/src/duskgl/display/shader/data/entities.c index 712853e..172bfa6 100644 --- a/src/duskgl/display/shader/data/entities.c +++ b/src/duskgl/display/shader/data/entities.c @@ -15,7 +15,7 @@ entitiesdata_t ENTITIES_DATA; void entitiesInit() { memoryZero(&ENTITIES_DATA, sizeof(entitiesdata_t)); - shaderBufferInit(&ENTITIES_BUFFER, sizeof(overworld_t)); + shaderBufferInit(&ENTITIES_BUFFER, sizeof(entitiesdata_t)); } void entitiesUpdate() { @@ -29,12 +29,12 @@ void entitiesUpdate() { &dst->position, &src->x, &src->subY + sizeof(uint8_t), - sizeof(uint_t) + sizeof(uint8_t) * 4 ); } shaderBufferBind(&ENTITIES_BUFFER); - shaderBufferSetData(&ENTITIES_BUFFER, &OVERWORLD); + shaderBufferSetData(&ENTITIES_BUFFER, &ENTITIES_DATA); } void entitiesDispose() { diff --git a/src/duskgl/display/shader/data/entities.glsl b/src/duskgl/display/shader/data/entities.glsl index 89f8954..56a6f7e 100644 --- a/src/duskgl/display/shader/data/entities.glsl +++ b/src/duskgl/display/shader/data/entities.glsl @@ -8,8 +8,7 @@ #include "../fragments/quad.glsl" struct Entity { - uint position; - uvec3 _p0; + uvec4 position; }; layout(std140) uniform b_Entities { @@ -24,10 +23,11 @@ vec2 entityGetVertice(uint instanceIndex, uint indiceIndex) { // Get base quad vertice vec2 vert = quadGetVertice(indiceIndex); - uint x = packedGetU8(0u, entities[instanceIndex].position); - uint y = packedGetU8(1u, entities[instanceIndex].position); - int subX = packedGetI8(2u, entities[instanceIndex].position); - int subY = packedGetI8(3u, entities[instanceIndex].position); + uint entIndex = instanceIndex; + uint x = packedGetU8(0u, entities[entIndex].position); + uint y = packedGetU8(1u, entities[entIndex].position); + int subX = packedGetI8(2u, entities[entIndex].position); + int subY = packedGetI8(3u, entities[entIndex].position); vert.x += float(x); vert.y += float(y); diff --git a/src/duskgl/display/shader/data/entities.h b/src/duskgl/display/shader/data/entities.h index 6b18cdd..9b3ede2 100644 --- a/src/duskgl/display/shader/data/entities.h +++ b/src/duskgl/display/shader/data/entities.h @@ -12,8 +12,7 @@ #define ENTITIES_BLOCK_NAME "b_Entities" typedef struct { - uint_t position; - uvec3_t _p0; + uvec4_t position; } entitiesdataent_t; typedef struct { diff --git a/src/duskgl/display/shader/data/map.glsl b/src/duskgl/display/shader/data/map.glsl index 1cfd4fb..995506c 100644 --- a/src/duskgl/display/shader/data/map.glsl +++ b/src/duskgl/display/shader/data/map.glsl @@ -11,8 +11,7 @@ layout(std140) uniform b_Map { uvec4 mapTileIds[OVERWORLD_TILE_COUNT_MAX / MAP_TILE_PACKED_SIZE]; - uint mapSize; - uvec3 _padding0; + uvec4 mapSize; }; vec2 mapTileGetSize() { diff --git a/src/duskgl/display/shader/data/mapshaderdata.c b/src/duskgl/display/shader/data/mapshaderdata.c index f072de5..b994b06 100644 --- a/src/duskgl/display/shader/data/mapshaderdata.c +++ b/src/duskgl/display/shader/data/mapshaderdata.c @@ -38,7 +38,7 @@ void mapShaderDataUpdate() { &MAP_SHADER_DATA_DATA.mapSize, &OVERWORLD.map.width, &OVERWORLD.map.layerCount + sizeof(uint8_t), - sizeof(MAP_SHADER_DATA_DATA.mapSize) + sizeof(uint8_t) * 3 ); shaderBufferBind(&MAP_SHADER_DATA_BUFFER); diff --git a/src/duskgl/display/shader/data/mapshaderdata.h b/src/duskgl/display/shader/data/mapshaderdata.h index 9fa75a9..76fa0a3 100644 --- a/src/duskgl/display/shader/data/mapshaderdata.h +++ b/src/duskgl/display/shader/data/mapshaderdata.h @@ -14,8 +14,7 @@ typedef struct { uvec4_t tileIds[OVERWORLD_TILE_COUNT_MAX / MAP_TILE_PACK_SIZE]; - uint_t mapSize; - uvec3_t _p0; + uvec4_t mapSize; } mapshaderdata_t; extern shaderbuffer_t MAP_SHADER_DATA_BUFFER; diff --git a/src/duskgl/display/shader/fragments/packed.glsl b/src/duskgl/display/shader/fragments/packed.glsl index 1feb15a..fcc5928 100644 --- a/src/duskgl/display/shader/fragments/packed.glsl +++ b/src/duskgl/display/shader/fragments/packed.glsl @@ -6,17 +6,16 @@ #define PACKED_U8_PER_UI 4 #define PACKED_U8_PER_UVEC4 PACKED_U8_PER_UI * 4 -uint packedGetU8(uint position, uint data) { - return (data >> (position * 8u)) & 0xFFu; +uint packedGetU8(uint position, uvec4 data) { + uint subData = data[position / 4u]; + return (subData >> (position * 8u)) & 0xFFu; } -uint packedGetU8FromVEC4(uint position, vec4 data) { - return packedGetU8(position, uint(data[position / 4u])); -} +int packedGetI8(uint position, uvec4 data) { + uint subData = data[position / 4u]; -int packedGetI8(uint position, uint data) { int shift = int(position * 8u); - return int(data << (24 - shift)) >> 24; + return int(subData << (24 - shift)) >> 24; } uint packedArrayGetU8IndexFromUVEC4Array(uint u8ArrayIndex) { diff --git a/src/duskgl/duskgl.h b/src/duskgl/duskgl.h index 9d56635..66537e0 100644 --- a/src/duskgl/duskgl.h +++ b/src/duskgl/duskgl.h @@ -21,7 +21,4 @@ typedef double double_t; extern char_t EXECUTABLE_PATH[]; extern char_t EXECUTABLE_DIRECTORY[]; -typedef uint32_t uint_t; -typedef uint_t uvec4_t[4]; -typedef uint_t uvec3_t[3]; -typedef uint_t uvec2_t[2]; \ No newline at end of file +typedef uint32_t uvec4_t[4]; \ No newline at end of file