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;

14
main.c
View file

@ -43,7 +43,7 @@ static const char *fragment_shader_text =
"{\n"
//" color=vec4(v_tex.rg,0.5,0.5);\n"
" if (v_tex.x < 0.0 || v_tex.y < 0.0) { discard; }\n"
" dist = distance(v_pos_out, center)/65;\n"
" dist = distance(v_pos_out, center + vec3(8,8,8))/65;\n"
" if (dist > 1.0) { dist = 1.0; }\n"
" color=vec4(texture(sampler_tex, v_tex).rgb,1.0)*(1.0-(dist*dist)) + vec4(0.2,0.5,0.7,1.0)*(dist*dist);\n"
"}\n";
@ -240,9 +240,9 @@ int main(void) {
glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat *)&mvp);
glUniform3fv(center_location, 1, (const GLfloat *)(&(oldPos[0])));
int ax = (int)(oldPos[0] / CHUNK_LENGTH) - (int)(pos[0] / CHUNK_LENGTH);
int ay = (int)(oldPos[1] / CHUNK_LENGTH) - (int)(pos[1] / CHUNK_LENGTH);
int az = (int)(oldPos[2] / CHUNK_LENGTH) - (int)(pos[2] / CHUNK_LENGTH);
int ax = (int)(oldPos[0]/ CHUNK_LENGTH) - (int)(pos[0] / CHUNK_LENGTH);
int ay = (int)(oldPos[1]/ CHUNK_LENGTH) - (int)(pos[1] / CHUNK_LENGTH);
int az = (int)(oldPos[2]/ CHUNK_LENGTH) - (int)(pos[2] / CHUNK_LENGTH);
if ((ax != 0 || ay != 0 || az != 0) && last_render < 0) {
struct args args;
@ -259,9 +259,9 @@ int main(void) {
last_render = 120;
if (thread_id == 0) {
oldPos[0] = pos[0];
oldPos[1] = pos[1];
oldPos[2] = pos[2];
oldPos[0] = (int)(pos[0]/ CHUNK_LENGTH) * CHUNK_LENGTH;
oldPos[1] = (int)(pos[1]/ CHUNK_LENGTH) * CHUNK_LENGTH;
oldPos[2] = (int)(pos[2]/ CHUNK_LENGTH) * CHUNK_LENGTH;
pthread_create(&(thread_id), NULL, render_chunks, (void *)&(args));
}
}