Fixed packed rendering.
This commit is contained in:
@ -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
|
||||
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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];
|
||||
typedef uint32_t uvec4_t[4];
|
Reference in New Issue
Block a user