improve chunk outline matching sodium checks
This commit is contained in:
@@ -91,18 +91,18 @@ public class ChunkBoundRenderer {
|
|||||||
long ptr = UploadStream.INSTANCE.upload(this.uniformBuffer, 0, 128);
|
long ptr = UploadStream.INSTANCE.upload(this.uniformBuffer, 0, 128);
|
||||||
long matPtr = ptr; ptr += 4*4*4;
|
long matPtr = ptr; ptr += 4*4*4;
|
||||||
|
|
||||||
final float renderDistance = MinecraftClient.getInstance().options.getClampedViewDistance()*16;//In blocks
|
final float renderDistance = MinecraftClient.getInstance().options.getClampedViewDistance()*16+0.01f;//In blocks
|
||||||
|
|
||||||
{//This is recomputed to be in chunk section space not worldsection
|
{//This is recomputed to be in chunk section space not worldsection
|
||||||
int sx = MathHelper.floor(viewport.cameraX) >> 4;
|
int sx = MathHelper.floor(viewport.cameraX);
|
||||||
int sy = MathHelper.floor(viewport.cameraY) >> 4;
|
int sy = MathHelper.floor(viewport.cameraY);
|
||||||
int sz = MathHelper.floor(viewport.cameraZ) >> 4;
|
int sz = MathHelper.floor(viewport.cameraZ);
|
||||||
new Vector3i(sx, sy, sz).getToAddress(ptr); ptr += 4*4;
|
new Vector3i(sx, sy, sz).getToAddress(ptr); ptr += 4*4;
|
||||||
|
|
||||||
var negInnerSec = new Vector3f(
|
var negInnerSec = new Vector3f(
|
||||||
-(float) (viewport.cameraX - (sx << 4)),
|
-(float) (viewport.cameraX - sx),
|
||||||
-(float) (viewport.cameraY - (sy << 4)),
|
-(float) (viewport.cameraY - sy),
|
||||||
-(float) (viewport.cameraZ - (sz << 4)));
|
-(float) (viewport.cameraZ - sz));
|
||||||
|
|
||||||
viewport.MVP.translate(negInnerSec, new Matrix4f()).getToAddress(matPtr);
|
viewport.MVP.translate(negInnerSec, new Matrix4f()).getToAddress(matPtr);
|
||||||
|
|
||||||
|
|||||||
@@ -15,10 +15,8 @@ ivec3 unpackPos(ivec2 pos) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool shouldRender(ivec3 icorner) {
|
bool shouldRender(ivec3 icorner) {
|
||||||
vec3 corner = vec3(icorner*16)+negInnerSec.xyz;
|
vec3 corner = vec3(mix(mix(ivec3(0), icorner-1, lessThan(ivec3(0), icorner-1)), icorner+17, lessThan(icorner+17, ivec3(0))))-negInnerSec.xyz;
|
||||||
//closest point TODO: OPTIMIZE
|
return (corner.x*corner.x + corner.z*corner.z <= negInnerSec.w*negInnerSec.w) && abs(corner.y) <= negInnerSec.w;
|
||||||
corner = mix(mix(vec3(0), corner, lessThan(vec3(0), corner)), corner+16, lessThan(corner+16, vec3(0)));
|
|
||||||
return (corner.x*corner.x + corner.z*corner.z < negInnerSec.w*negInnerSec.w) && abs(corner.y) < negInnerSec.w;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TAA
|
#ifdef TAA
|
||||||
@@ -28,7 +26,7 @@ vec2 getTAA();
|
|||||||
void main() {
|
void main() {
|
||||||
uint id = (gl_InstanceID<<5)+gl_BaseInstance+(gl_VertexID>>3);
|
uint id = (gl_InstanceID<<5)+gl_BaseInstance+(gl_VertexID>>3);
|
||||||
|
|
||||||
ivec3 origin = unpackPos(chunkPos[id]);
|
ivec3 origin = unpackPos(chunkPos[id])*16;
|
||||||
origin -= section.xyz;
|
origin -= section.xyz;
|
||||||
|
|
||||||
if (!shouldRender(origin)) {
|
if (!shouldRender(origin)) {
|
||||||
@@ -36,11 +34,11 @@ void main() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ivec3 cubeCornerI = ivec3(gl_VertexID&1, (gl_VertexID>>2)&1, (gl_VertexID>>1)&1);
|
ivec3 cubeCornerI = ivec3(gl_VertexID&1, (gl_VertexID>>2)&1, (gl_VertexID>>1)&1)*16;
|
||||||
//Expand the y height to be big (will be +- 8192)
|
//Expand the y height to be big (will be +- 8192)
|
||||||
//TODO: make it W.R.T world height and offsets
|
//TODO: make it W.R.T world height and offsets
|
||||||
//cubeCornerI.y = cubeCornerI.y*1024-512;
|
//cubeCornerI.y = cubeCornerI.y*1024-512;
|
||||||
gl_Position = MVP * vec4(vec3(cubeCornerI+origin)*16, 1);
|
gl_Position = MVP * vec4(vec3(cubeCornerI+origin), 1);
|
||||||
gl_Position.z -= 0.0005f;
|
gl_Position.z -= 0.0005f;
|
||||||
|
|
||||||
#ifdef TAA
|
#ifdef TAA
|
||||||
|
|||||||
Reference in New Issue
Block a user