Fixed packed rendering.

This commit is contained in:
2025-03-04 12:17:13 -06:00
parent f19636edb1
commit 04eb4736d8
9 changed files with 21 additions and 28 deletions

View File

@ -5,7 +5,7 @@
* https://opensource.org/licenses/MIT * 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_WIDTH 32
#define OVERWORLD_ENTITY_HEIGHT 32 #define OVERWORLD_ENTITY_HEIGHT 32

View File

@ -15,7 +15,7 @@ entitiesdata_t ENTITIES_DATA;
void entitiesInit() { void entitiesInit() {
memoryZero(&ENTITIES_DATA, sizeof(entitiesdata_t)); memoryZero(&ENTITIES_DATA, sizeof(entitiesdata_t));
shaderBufferInit(&ENTITIES_BUFFER, sizeof(overworld_t)); shaderBufferInit(&ENTITIES_BUFFER, sizeof(entitiesdata_t));
} }
void entitiesUpdate() { void entitiesUpdate() {
@ -29,12 +29,12 @@ void entitiesUpdate() {
&dst->position, &dst->position,
&src->x, &src->x,
&src->subY + sizeof(uint8_t), &src->subY + sizeof(uint8_t),
sizeof(uint_t) sizeof(uint8_t) * 4
); );
} }
shaderBufferBind(&ENTITIES_BUFFER); shaderBufferBind(&ENTITIES_BUFFER);
shaderBufferSetData(&ENTITIES_BUFFER, &OVERWORLD); shaderBufferSetData(&ENTITIES_BUFFER, &ENTITIES_DATA);
} }
void entitiesDispose() { void entitiesDispose() {

View File

@ -8,8 +8,7 @@
#include "../fragments/quad.glsl" #include "../fragments/quad.glsl"
struct Entity { struct Entity {
uint position; uvec4 position;
uvec3 _p0;
}; };
layout(std140) uniform b_Entities { layout(std140) uniform b_Entities {
@ -24,10 +23,11 @@ vec2 entityGetVertice(uint instanceIndex, uint indiceIndex) {
// Get base quad vertice // Get base quad vertice
vec2 vert = quadGetVertice(indiceIndex); vec2 vert = quadGetVertice(indiceIndex);
uint x = packedGetU8(0u, entities[instanceIndex].position); uint entIndex = instanceIndex;
uint y = packedGetU8(1u, entities[instanceIndex].position); uint x = packedGetU8(0u, entities[entIndex].position);
int subX = packedGetI8(2u, entities[instanceIndex].position); uint y = packedGetU8(1u, entities[entIndex].position);
int subY = packedGetI8(3u, entities[instanceIndex].position); int subX = packedGetI8(2u, entities[entIndex].position);
int subY = packedGetI8(3u, entities[entIndex].position);
vert.x += float(x); vert.x += float(x);
vert.y += float(y); vert.y += float(y);

View File

@ -12,8 +12,7 @@
#define ENTITIES_BLOCK_NAME "b_Entities" #define ENTITIES_BLOCK_NAME "b_Entities"
typedef struct { typedef struct {
uint_t position; uvec4_t position;
uvec3_t _p0;
} entitiesdataent_t; } entitiesdataent_t;
typedef struct { typedef struct {

View File

@ -11,8 +11,7 @@
layout(std140) uniform b_Map { layout(std140) uniform b_Map {
uvec4 mapTileIds[OVERWORLD_TILE_COUNT_MAX / MAP_TILE_PACKED_SIZE]; uvec4 mapTileIds[OVERWORLD_TILE_COUNT_MAX / MAP_TILE_PACKED_SIZE];
uint mapSize; uvec4 mapSize;
uvec3 _padding0;
}; };
vec2 mapTileGetSize() { vec2 mapTileGetSize() {

View File

@ -38,7 +38,7 @@ void mapShaderDataUpdate() {
&MAP_SHADER_DATA_DATA.mapSize, &MAP_SHADER_DATA_DATA.mapSize,
&OVERWORLD.map.width, &OVERWORLD.map.width,
&OVERWORLD.map.layerCount + sizeof(uint8_t), &OVERWORLD.map.layerCount + sizeof(uint8_t),
sizeof(MAP_SHADER_DATA_DATA.mapSize) sizeof(uint8_t) * 3
); );
shaderBufferBind(&MAP_SHADER_DATA_BUFFER); shaderBufferBind(&MAP_SHADER_DATA_BUFFER);

View File

@ -14,8 +14,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; uvec4_t mapSize;
uvec3_t _p0;
} mapshaderdata_t; } mapshaderdata_t;
extern shaderbuffer_t MAP_SHADER_DATA_BUFFER; extern shaderbuffer_t MAP_SHADER_DATA_BUFFER;

View File

@ -6,17 +6,16 @@
#define PACKED_U8_PER_UI 4 #define PACKED_U8_PER_UI 4
#define PACKED_U8_PER_UVEC4 PACKED_U8_PER_UI * 4 #define PACKED_U8_PER_UVEC4 PACKED_U8_PER_UI * 4
uint packedGetU8(uint position, uint data) { uint packedGetU8(uint position, uvec4 data) {
return (data >> (position * 8u)) & 0xFFu; uint subData = data[position / 4u];
return (subData >> (position * 8u)) & 0xFFu;
} }
uint packedGetU8FromVEC4(uint position, vec4 data) { int packedGetI8(uint position, uvec4 data) {
return packedGetU8(position, uint(data[position / 4u])); uint subData = data[position / 4u];
}
int packedGetI8(uint position, uint data) {
int shift = int(position * 8u); int shift = int(position * 8u);
return int(data << (24 - shift)) >> 24; return int(subData << (24 - shift)) >> 24;
} }
uint packedArrayGetU8IndexFromUVEC4Array(uint u8ArrayIndex) { uint packedArrayGetU8IndexFromUVEC4Array(uint u8ArrayIndex) {

View File

@ -21,7 +21,4 @@ typedef double double_t;
extern char_t EXECUTABLE_PATH[]; extern char_t EXECUTABLE_PATH[];
extern char_t EXECUTABLE_DIRECTORY[]; extern char_t EXECUTABLE_DIRECTORY[];
typedef uint32_t uint_t; typedef uint32_t uvec4_t[4];
typedef uint_t uvec4_t[4];
typedef uint_t uvec3_t[3];
typedef uint_t uvec2_t[2];