Update TileRender.cpp, terrain_frag.glsl, and terrain_vert.glsl

This commit is contained in:
Skarn
2022-03-13 15:22:27 +03:00
parent 7d9d676eb4
commit aac728564a
3 changed files with 25 additions and 10 deletions

View File

@@ -134,7 +134,10 @@ void TileRender::draw (OpenGL::Scoped::use_program& mcnk_shader
auto& chunk = _map_tile->mChunks[chunk_y][chunk_x];
_chunk_instance_data[i].ChunkXYZBase_Pad1 = {chunk->xbase, chunk->ybase, chunk->zbase, 1.0};
_chunk_instance_data[i].ChunkXZ_TileXZ[0] = chunk->px;
_chunk_instance_data[i].ChunkXZ_TileXZ[1] = chunk->py;
_chunk_instance_data[i].ChunkXZ_TileXZ[2] = static_cast<int>(_map_tile->index.x);
_chunk_instance_data[i].ChunkXZ_TileXZ[3] = static_cast<int>(_map_tile->index.z);
unsigned flags = chunk->getUpdateFlags();

View File

@@ -38,7 +38,7 @@ struct ChunkInstanceData
ivec4 ChunkTexDoAnim;
ivec4 ChunkTexAnimSpeed;
ivec4 AreaIDColor_Pad2_DrawSelection;
vec4 ChunkXYZBase_Pad1;
ivec4 ChunkXZ_TileXZ;
ivec4 ChunkTexAnimDir;
};

View File

@@ -1,6 +1,9 @@
// This file is part of Noggit3, licensed under GNU General Public License (version 3).
#version 410 core
const double TILESIZE = 533.33333;
const double CHUNKSIZE = TILESIZE / 16.0;
in vec2 position;
in vec2 texcoord;
@@ -18,7 +21,7 @@ struct ChunkInstanceData
ivec4 ChunkTexDoAnim;
ivec4 ChunkTexAnimSpeed;
ivec4 AreaIDColor_Pad2_DrawSelection;
vec4 ChunkXYZBase_Pad1;
ivec4 ChunkXZ_TileXZ;
ivec4 ChunkTexAnimDir;
};
@@ -150,22 +153,31 @@ vec2 animUVOffset(int do_animate, int spd, int dir)
void main()
{
int t_i = gl_InstanceID / 16;
int t_y = gl_InstanceID % 16;
int t_x = gl_InstanceID / 16;
int t_z = gl_InstanceID % 16;
instanceID = base_instance + (t_i * 16 + t_y);
instanceID = base_instance + (t_x * 16 + t_z);
vec4 normal_pos = texelFetch(heightmap, ivec2(gl_VertexID, instanceID), 0);
vec3 pos_base = instances[instanceID].ChunkXYZBase_Pad1.xyz;
vec3 pos = vec3(position.x + pos_base.x, pos_base.y + normal_pos.a, position.y + pos_base.z);
vec3 pos_base = instances[instanceID].ChunkXZ_TileXZ.xyz;
dvec3 pos = dvec3(double(instances[instanceID].ChunkXZ_TileXZ.z * TILESIZE)
+ double(instances[instanceID].ChunkXZ_TileXZ.x * CHUNKSIZE)
+ double(position.x)
, double(normal_pos.a)
, double(instances[instanceID].ChunkXZ_TileXZ.w * TILESIZE)
+ double(instances[instanceID].ChunkXZ_TileXZ.y * CHUNKSIZE)
+ double(position.y)
);
bool is_hole = isHoleVertex(gl_VertexID, instances[instanceID].ChunkHoles_DrawImpass_TexLayerCount_CantPaint.r);
float NaN = makeNaN(1);
gl_Position = projection * model_view * (is_hole ? vec4(NaN, NaN, NaN, 1.0) : vec4(pos, 1.0));
dvec4 pos_after_hole_check = (is_hole ? dvec4(NaN, NaN, NaN, 1.0) : dvec4(pos, 1.0));
gl_Position = projection * model_view * vec4(pos_after_hole_check);
vary_normal = normal_pos.rgb;
vary_position = pos;
vary_position = vec3(pos);
vary_mccv = texelFetch(mccv, ivec2(gl_VertexID, instanceID), 0).rgb;
vary_t0_uv = texcoord + animUVOffset(instances[instanceID].ChunkTexDoAnim.r,