mirror of
https://git.stillkill.net/MinecraftLeak/MinecraftLegends.git
synced 2026-10-22 21:32:19 +01:00
Initial commit
This commit is contained in:
commit
86efc669e9
5013 files changed
+237743
No files matched your search
@@ -0,0 +1,115 @@
|
||||
// __multiversion__
|
||||
// This signals the loading code to prepend either #version 100 or #version 300 es as apropriate.
|
||||
|
||||
// To use centroid sampling we need to have version 300 es shaders, which requires changing:
|
||||
// attribute to in
|
||||
// varying to out when in vertex shaders or in when in fragment shaders
|
||||
// defining an out vec4 FragColor and replacing uses of gl_FragColor with FragColor
|
||||
// texture2D to texture
|
||||
|
||||
precision highp float;
|
||||
|
||||
#include "shaders/vertexVersionCentroid.h"
|
||||
|
||||
#if __VERSION__ >= 300
|
||||
#ifndef BYPASS_PIXEL_SHADER
|
||||
_centroid out vec2 colorLookupUV;
|
||||
_centroid out vec2 parallaxUV;
|
||||
#endif
|
||||
#else
|
||||
#ifndef BYPASS_PIXEL_SHADER
|
||||
varying vec2 colorLookupUV;
|
||||
varying vec2 parallaxUV;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BYPASS_PIXEL_SHADER
|
||||
varying lowp vec4 encodedPlane;
|
||||
#ifdef FOG
|
||||
varying vec4 fogColor;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "shaders/uniformWorldConstants.h"
|
||||
#include "shaders/uniformPerFrameConstants.h"
|
||||
#include "shaders/uniformShaderConstants.h"
|
||||
#include "shaders/uniformRenderChunkConstants.h"
|
||||
|
||||
#ifndef BYPASS_PIXEL_SHADER
|
||||
attribute POS4 POSITION;
|
||||
attribute vec4 COLOR;
|
||||
attribute vec2 TEXCOORD_0;
|
||||
attribute vec2 TEXCOORD_1;
|
||||
#endif
|
||||
|
||||
const float MAX_LAYER_DEPTH = 32.0;
|
||||
|
||||
void main() {
|
||||
///// Vertex Transformation
|
||||
POS4 worldPos = vec4((POSITION.xyz * CHUNK_ORIGIN_AND_SCALE.w) + CHUNK_ORIGIN_AND_SCALE.xyz, 1);
|
||||
POS4 pos = PROJ * (WORLDVIEW * worldPos);
|
||||
gl_Position = pos;
|
||||
|
||||
#ifndef BYPASS_PIXEL_SHADER
|
||||
///// End Portal Data
|
||||
colorLookupUV = TEXCOORD_0;
|
||||
encodedPlane = COLOR; // Color value is used to encode the starfield plane
|
||||
|
||||
vec3 planeNormal = (encodedPlane.xyz - vec3(0.5,0.5,0.5)) * 2.0;
|
||||
float planeDistance = encodedPlane.w * MAX_LAYER_DEPTH;
|
||||
|
||||
// Calculate view direction from the surface position and the eye position
|
||||
POS3 viewRay = worldPos.xyz;
|
||||
|
||||
///// Ray-cast for parallax-offset UV
|
||||
// Perform ray-plane intersection to find the position on the parallax plane
|
||||
float t = (dot(viewRay - (planeDistance * planeNormal), planeNormal)) / dot(viewRay, planeNormal);
|
||||
POS3 parallaxPositionInWorld = (t * viewRay) + VIEW_POS;
|
||||
|
||||
///// Ridiculous UV-remapping
|
||||
// Create a mask with a 1 wherever the normal would have a non-zero value
|
||||
// All normals are orthonormal on <x,y,z>, so there should be two 0's and a 1
|
||||
vec3 normalMask = floor(abs(planeNormal) + vec3(0.5,0.5,0.5));
|
||||
// Mask out the correct uv result
|
||||
vec2 raycastUV = parallaxPositionInWorld.yz * normalMask[0] + parallaxPositionInWorld.xz * normalMask[1] + parallaxPositionInWorld.xy * normalMask[2];
|
||||
|
||||
// Scale the UVs to Minecraft pixel size
|
||||
raycastUV = raycastUV / 16.0; // TODO: Use TEXTURE_DIMENSIONS
|
||||
|
||||
const float rotor = 3.1415926535897 * (5.0 / 7.0);
|
||||
float rotS = sin(planeDistance * rotor);
|
||||
float rotC = cos(planeDistance * rotor);
|
||||
|
||||
parallaxUV = mat2(vec2(rotC, rotS), vec2(-rotS, rotC)) * raycastUV;
|
||||
|
||||
parallaxUV += vec2(rotC, rotS) * planeDistance;
|
||||
parallaxUV.y += TIME / 256.0;
|
||||
|
||||
const float modVal = 64.0;
|
||||
parallaxUV = vec2(mod(parallaxUV.x, modVal), mod(parallaxUV.y, modVal));
|
||||
|
||||
///// Fog
|
||||
#ifdef FOG
|
||||
#ifdef FANCY
|
||||
vec3 relPos = -worldPos.xyz;
|
||||
float cameraDepth = length(relPos);
|
||||
#ifdef NEAR_WATER
|
||||
cameraDist = cameraDepth / FAR_CHUNKS_DISTANCE;
|
||||
#endif
|
||||
#else
|
||||
float cameraDepth = pos.z;
|
||||
#ifdef NEAR_WATER
|
||||
vec3 relPos = -worldPos.xyz;
|
||||
float camDist = length(relPos);
|
||||
cameraDist = camDist / FAR_CHUNKS_DISTANCE;
|
||||
#endif
|
||||
#endif
|
||||
float len = cameraDepth / RENDER_DISTANCE;
|
||||
#ifdef ALLOW_FADE
|
||||
len += CURRENT_COLOR.r;
|
||||
#endif
|
||||
fogColor.rgb = FOG_COLOR.rgb;
|
||||
fogColor.a = clamp((len - FOG_CONTROL.x) / (FOG_CONTROL.y - FOG_CONTROL.x), 0.0, 1.0);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
Reference in new issue
Block a user