fog fixes, optimizations

This commit is contained in:
onezplpl 2024-07-15 05:25:15 -04:00
parent 5ff44a7335
commit e66093d684
No known key found for this signature in database
GPG key ID: 7EC026A136F9EEC3
2 changed files with 28 additions and 17 deletions

31
cubes.c
View file

@ -41,7 +41,6 @@ void gen_face(Vertex *cube, int i, int x, int y, int z, int x2, int y2, int z2,
Vertex c = a2;
Vertex d = a2;
if (is_text) {
b.pos[0] += TEXT_GAP_H;
c.pos[1] += TEXT_GAP_V;
@ -78,12 +77,21 @@ void *gen_chunk(void *args) {
Vertex *text = args2.text;
// int is_text = args2.is_text;
int the_j = (((z2 / CHUNK_LENGTH)%a3) + ((x2 / CHUNK_LENGTH)%a3) * CHUNK_DIAMETER_H +
((y2 / CHUNK_LENGTH)%a3) * CHUNK_DIAMETER_H * CHUNK_DIAMETER_H) %
CHUNK_ALL;
int the_j = (((z2 / CHUNK_LENGTH) % CHUNK_DIAMETER_H) +
((x2 / CHUNK_LENGTH) % CHUNK_DIAMETER_H) * CHUNK_DIAMETER_H +
((y2 / CHUNK_LENGTH) % CHUNK_DIAMETER_V) * CHUNK_DIAMETER_H *
CHUNK_DIAMETER_H) %
(CHUNK_ALL * CBUF_ALL);
Chunk old_chunk = chunk_old[the_j > 0 ? the_j : 0];
int cached =
(old_chunk.x == x2 / CHUNK_LENGTH && old_chunk.y == y2 / CHUNK_LENGTH &&
old_chunk.z == z2 / CHUNK_LENGTH && old_chunk.exists != 0);
Chunk chunk =
fetch_chunk(x2 / CHUNK_LENGTH, y2 / CHUNK_LENGTH, z2 / CHUNK_LENGTH, a,
chunk_old[the_j > 0 ? the_j : 0].exists, read_order);
cached ? old_chunk
: fetch_chunk(x2 / CHUNK_LENGTH, y2 / CHUNK_LENGTH,
z2 / CHUNK_LENGTH, a, old_chunk.exists, read_order);
if (chunk.exists != 0 && the_j > 0)
chunk_old[the_j] = chunk;
@ -142,7 +150,7 @@ int gen_cubes(Vertex *cube, Vertex *text, int x, int y, int z, int r,
}
if (!chunk_old) {
chunk_old = calloc(CHUNK_ALL, sizeof(struct Chunk));
chunk_old = calloc((CHUNK_ALL * CBUF_ALL), sizeof(struct Chunk));
}
read_order = !read_order;
pthread_t thread_id[a3];
@ -156,11 +164,14 @@ int gen_cubes(Vertex *cube, Vertex *text, int x, int y, int z, int r,
z2 <= z + (CHUNK_RADIUS_H + r) * CHUNK_LENGTH; z2 += CHUNK_LENGTH) {
VertexI pos = {
{x + (((x2 / CHUNK_LENGTH) % (CHUNK_DIAMETER_H + r * 2))) *
{x + (((x2 / CHUNK_LENGTH) % (CHUNK_DIAMETER_H + r * 2)) -
CHUNK_RADIUS_H) *
CHUNK_LENGTH,
y + (((y2 / CHUNK_LENGTH) % (CHUNK_DIAMETER_V + r * 2))) *
y + (((y2 / CHUNK_LENGTH) % (CHUNK_DIAMETER_V + r * 2)) -
CHUNK_RADIUS_V) *
CHUNK_LENGTH,
z + (((z2 / CHUNK_LENGTH) % (CHUNK_DIAMETER_H + r * 2))) *
z + (((z2 / CHUNK_LENGTH) % (CHUNK_DIAMETER_H + r * 2)) -
CHUNK_RADIUS_H) *
CHUNK_LENGTH}};
int a2 = a % a3;