fog fixes, optimizations
This commit is contained in:
parent
5ff44a7335
commit
e66093d684
2 changed files with 28 additions and 17 deletions
31
cubes.c
31
cubes.c
|
@ -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 c = a2;
|
||||||
Vertex d = a2;
|
Vertex d = a2;
|
||||||
|
|
||||||
|
|
||||||
if (is_text) {
|
if (is_text) {
|
||||||
b.pos[0] += TEXT_GAP_H;
|
b.pos[0] += TEXT_GAP_H;
|
||||||
c.pos[1] += TEXT_GAP_V;
|
c.pos[1] += TEXT_GAP_V;
|
||||||
|
@ -78,12 +77,21 @@ void *gen_chunk(void *args) {
|
||||||
Vertex *text = args2.text;
|
Vertex *text = args2.text;
|
||||||
// int is_text = args2.is_text;
|
// int is_text = args2.is_text;
|
||||||
|
|
||||||
int the_j = (((z2 / CHUNK_LENGTH)%a3) + ((x2 / CHUNK_LENGTH)%a3) * CHUNK_DIAMETER_H +
|
int the_j = (((z2 / CHUNK_LENGTH) % CHUNK_DIAMETER_H) +
|
||||||
((y2 / CHUNK_LENGTH)%a3) * CHUNK_DIAMETER_H * CHUNK_DIAMETER_H) %
|
((x2 / CHUNK_LENGTH) % CHUNK_DIAMETER_H) * CHUNK_DIAMETER_H +
|
||||||
CHUNK_ALL;
|
((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 =
|
Chunk chunk =
|
||||||
fetch_chunk(x2 / CHUNK_LENGTH, y2 / CHUNK_LENGTH, z2 / CHUNK_LENGTH, a,
|
cached ? old_chunk
|
||||||
chunk_old[the_j > 0 ? the_j : 0].exists, read_order);
|
: fetch_chunk(x2 / CHUNK_LENGTH, y2 / CHUNK_LENGTH,
|
||||||
|
z2 / CHUNK_LENGTH, a, old_chunk.exists, read_order);
|
||||||
|
|
||||||
if (chunk.exists != 0 && the_j > 0)
|
if (chunk.exists != 0 && the_j > 0)
|
||||||
chunk_old[the_j] = chunk;
|
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) {
|
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;
|
read_order = !read_order;
|
||||||
pthread_t thread_id[a3];
|
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) {
|
z2 <= z + (CHUNK_RADIUS_H + r) * CHUNK_LENGTH; z2 += CHUNK_LENGTH) {
|
||||||
|
|
||||||
VertexI pos = {
|
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,
|
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,
|
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}};
|
CHUNK_LENGTH}};
|
||||||
|
|
||||||
int a2 = a % a3;
|
int a2 = a % a3;
|
||||||
|
|
14
main.c
14
main.c
|
@ -43,7 +43,7 @@ static const char *fragment_shader_text =
|
||||||
"{\n"
|
"{\n"
|
||||||
//" color=vec4(v_tex.rg,0.5,0.5);\n"
|
//" color=vec4(v_tex.rg,0.5,0.5);\n"
|
||||||
" if (v_tex.x < 0.0 || v_tex.y < 0.0) { discard; }\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"
|
" 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"
|
" 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";
|
"}\n";
|
||||||
|
@ -240,9 +240,9 @@ int main(void) {
|
||||||
glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat *)&mvp);
|
glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat *)&mvp);
|
||||||
glUniform3fv(center_location, 1, (const GLfloat *)(&(oldPos[0])));
|
glUniform3fv(center_location, 1, (const GLfloat *)(&(oldPos[0])));
|
||||||
|
|
||||||
int ax = (int)(oldPos[0] / CHUNK_LENGTH) - (int)(pos[0] / 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 ay = (int)(oldPos[1]/ CHUNK_LENGTH) - (int)(pos[1] / CHUNK_LENGTH);
|
||||||
int az = (int)(oldPos[2] / CHUNK_LENGTH) - (int)(pos[2] / CHUNK_LENGTH);
|
int az = (int)(oldPos[2]/ CHUNK_LENGTH) - (int)(pos[2] / CHUNK_LENGTH);
|
||||||
|
|
||||||
if ((ax != 0 || ay != 0 || az != 0) && last_render < 0) {
|
if ((ax != 0 || ay != 0 || az != 0) && last_render < 0) {
|
||||||
struct args args;
|
struct args args;
|
||||||
|
@ -259,9 +259,9 @@ int main(void) {
|
||||||
last_render = 120;
|
last_render = 120;
|
||||||
|
|
||||||
if (thread_id == 0) {
|
if (thread_id == 0) {
|
||||||
oldPos[0] = pos[0];
|
oldPos[0] = (int)(pos[0]/ CHUNK_LENGTH) * CHUNK_LENGTH;
|
||||||
oldPos[1] = pos[1];
|
oldPos[1] = (int)(pos[1]/ CHUNK_LENGTH) * CHUNK_LENGTH;
|
||||||
oldPos[2] = pos[2];
|
oldPos[2] = (int)(pos[2]/ CHUNK_LENGTH) * CHUNK_LENGTH;
|
||||||
pthread_create(&(thread_id), NULL, render_chunks, (void *)&(args));
|
pthread_create(&(thread_id), NULL, render_chunks, (void *)&(args));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue