diff --git a/desktopRuntime/resources/glsl/core.glsl b/desktopRuntime/resources/glsl/core.glsl index 3e6a6ec..9f11465 100644 --- a/desktopRuntime/resources/glsl/core.glsl +++ b/desktopRuntime/resources/glsl/core.glsl @@ -23,10 +23,14 @@ in vec4 a_color; #ifdef CC_a_normal in vec4 a_normal; #endif - -#ifdef CC_fog -out vec4 v_position; +#ifdef CC_a_texture1 +in vec2 a_texture1; #endif + +#ifdef CC_TEX_GEN_STRQ +out vec4 v_object_pos; +#endif +out vec4 v_position; #ifdef CC_a_color out vec4 v_color; #endif @@ -36,11 +40,20 @@ out vec4 v_normal; #ifdef CC_a_texture0 out vec2 v_texture0; #endif +#ifdef CC_a_texture1 +out vec2 v_texture1; +#endif + +#endif + + +#ifdef CC_VERT void main(){ vec4 pos = matrix_m * vec4(a_position, 1.0); -#ifdef CC_fog v_position = pos; +#ifdef CC_TEX_GEN_STRQ + v_object_pos = vec4(a_position, 1.0); #endif #ifdef CC_a_color v_color = a_color; @@ -50,6 +63,9 @@ void main(){ #endif #ifdef CC_a_texture0 v_texture0 = a_texture0; +#endif +#ifdef CC_a_texture1 + v_texture1 = a_texture1; #endif gl_Position = matrix_p * pos; } @@ -58,12 +74,10 @@ void main(){ #ifdef CC_FRAG -#ifdef CC_unit0 uniform sampler2D tex0; -#ifndef CC_a_texture0 +uniform sampler2D tex1; uniform vec2 texCoordV0; -#endif -#endif +uniform vec2 texCoordV1; #ifdef CC_lighting uniform vec3 light0Pos; uniform vec3 light1Pos; @@ -71,20 +85,35 @@ uniform vec3 normalUniform; #endif #ifdef CC_fog uniform vec4 fogColor; -uniform int fogMode; -uniform float fogStart; -uniform float fogEnd; -uniform float fogDensity; -uniform float fogPremultiply; +//X = uniform float fogMode; +//Y = uniform float fogStart; +//Z = uniform float fogEnd - fogStart; +//W = uniform float fogDensity; +uniform vec4 fogParam; #endif uniform vec4 colorUniform; #ifdef CC_alphatest uniform float alphaTestF; #endif - -#ifdef CC_fog -in vec4 v_position; +#ifdef CC_TEX_GEN_STRQ +//uniform int textureGenS_M; +//uniform int textureGenT_M; +//uniform int textureGenR_M; +//uniform int textureGenQ_M; +uniform ivec4 textureGen_M; +uniform vec4 textureGenS_V; +uniform vec4 textureGenT_V; +uniform vec4 textureGenR_V; +uniform vec4 textureGenQ_V; #endif +#ifdef CC_patch_anisotropic +uniform vec2 anisotropic_fix; +#endif + +#ifdef CC_TEX_GEN_STRQ +in vec4 v_object_pos; +#endif +in vec4 v_position; #ifdef CC_a_color in vec4 v_color; #endif @@ -94,10 +123,14 @@ in vec4 v_normal; #ifdef CC_a_texture0 in vec2 v_texture0; #endif +#ifdef CC_a_texture1 +in vec2 v_texture1; +#endif out vec4 fragColor; #define TEX_MAT3x2(mat4In) mat3x2(mat4In[0].xy,mat4In[1].xy,mat4In[3].xy) +#define TEX_MAT4x3(mat4In) mat4x3(mat4In[0].xyw,mat4In[1].xyw,mat4In[2].xyw,mat4In[3].xyw) void main(){ #ifdef CC_a_color @@ -106,12 +139,48 @@ void main(){ vec4 color = colorUniform; #endif +#ifdef CC_TEX_GEN_STRQ + vec4 texSrc[2]; + texSrc[0] = v_object_pos; + texSrc[1] = v_position; + + vec4 texPos; + texPos.x = dot(texSrc[textureGen_M.x], textureGenS_V); + texPos.y = dot(texSrc[textureGen_M.y], textureGenT_V); + texPos.z = dot(texSrc[textureGen_M.z], textureGenR_V); + texPos.w = dot(texSrc[textureGen_M.w], textureGenQ_V); + texPos.xyz = TEX_MAT4x3(matrix_t) * texPos; + color *= texture(tex0, texPos.xy / texPos.z).bgra; +#ifdef CC_alphatest + if(color.a < alphaTestF){ + discard; + } +#endif +#else #ifdef CC_unit0 #ifdef CC_a_texture0 - color *= texture(tex0, (TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0)).xy).rgba; + +#ifdef CC_patch_anisotropic + vec2 uv = TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0); + + /* https://bugs.chromium.org/p/angleproject/issues/detail?id=4994 */ + uv = ((uv * anisotropic_fix) - fract(uv * anisotropic_fix) + 0.5) / anisotropic_fix; + + vec4 texColor = texture(tex0, uv); #else - color *= texture(tex0, (TEX_MAT3x2(matrix_t) * vec3(texCoordV0, 1.0)).xy).rgba; + vec4 texColor = texture(tex0, TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0)); #endif + +#else + vec4 texColor = texture(tex0, TEX_MAT3x2(matrix_t) * vec3(texCoordV0, 1.0)); +#endif + +#ifdef CC_swap_rb + color *= texColor.rgba; +#else + color *= texColor.bgra; +#endif + #endif #ifdef CC_alphatest @@ -120,6 +189,15 @@ void main(){ } #endif +#ifdef CC_unit1 +#ifdef CC_a_texture1 + color.rgb *= texture(tex1, (v_texture1 + 8.0) * 0.00390625).bgr; +#else + color.rgb *= texture(tex1, (texCoordV1 + 8.0) * 0.00390625).bgr; +#endif +#endif +#endif + #ifdef CC_lighting #ifdef CC_a_normal vec3 normal = ((v_normal.xyz - 0.5) * 2.0); @@ -133,11 +211,12 @@ void main(){ #ifdef CC_fog float dist = sqrt(dot(v_position, v_position)); - float i = (fogMode == 1) ? clamp((dist - fogStart) / (fogEnd - fogStart), 0.0, 1.0) : clamp(1.0 - exp(-(fogDensity * dist)), 0.0, 1.0); - color.rgb = mix(color.rgb, fogColor.xyz, i * fogColor.a); + float i = fogParam.x == 1.0 ? (dist - fogParam.y) / fogParam.z : 1.0 - exp(-fogParam.w * dist); + color.rgb = mix(color.rgb, fogColor.xyz, clamp(i, 0.0, 1.0) * fogColor.a); #endif fragColor = color; } #endif + diff --git a/desktopRuntime/resources/glsl/fxaa.glsl b/desktopRuntime/resources/glsl/fxaa.glsl deleted file mode 100644 index 8cd01a3..0000000 --- a/desktopRuntime/resources/glsl/fxaa.glsl +++ /dev/null @@ -1,255 +0,0 @@ -#line 0 - -precision lowp int; -precision lowp sampler2D; -precision lowp float; - -in vec2 pos; - -out vec4 fragColor; - -#define FXAA_PC 1 -#define FXAA_GLSL_130 1 -#define FXAA_FAST_PIXEL_OFFSET 0 -#define FXAA_GATHER4_ALPHA 0 - -#ifndef FXAA_GREEN_AS_LUMA - // For those using non-linear color, - // and either not able to get luma in alpha, or not wanting to, - // this enables FXAA to run using green as a proxy for luma. - // So with this enabled, no need to pack luma in alpha. - // - // This will turn off AA on anything which lacks some amount of green. - // Pure red and blue or combination of only R and B, will get no AA. - // - // Might want to lower the settings for both, - // fxaaConsoleEdgeThresholdMin - // fxaaQualityEdgeThresholdMin - // In order to insure AA does not get turned off on colors - // which contain a minor amount of green. - // - // 1 = On. - // 0 = Off. - // - #define FXAA_GREEN_AS_LUMA 1 -#endif - -#ifndef FXAA_DISCARD - // 1 = Use discard on pixels which don't need AA. - // 0 = Return unchanged color on pixels which don't need AA. - #define FXAA_DISCARD 0 -#endif - -/*============================================================================ - API PORTING -============================================================================*/ - #define FxaaBool bool - #define FxaaDiscard discard - #define FxaaFloat float - #define FxaaFloat2 vec2 - #define FxaaFloat3 vec3 - #define FxaaFloat4 vec4 - #define FxaaHalf float - #define FxaaHalf2 vec2 - #define FxaaHalf3 vec3 - #define FxaaHalf4 vec4 - #define FxaaInt2 ivec2 - #define FxaaSat(x) clamp(x, 0.0, 1.0) - #define FxaaTex sampler2D -/*--------------------------------------------------------------------------*/ - - #define FxaaTexTop(t, p) texture(t, p) - -/*============================================================================ - GREEN AS LUMA OPTION SUPPORT FUNCTION -============================================================================*/ -#if (FXAA_GREEN_AS_LUMA == 0) - // TODO Luma - FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return dot(rgba.xyz, vec3(0.299, 0.587, 0.114)); } -#else - FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; } -#endif - -/*============================================================================ - FXAA3 CONSOLE - PC VERSION -============================================================================*/ -/*--------------------------------------------------------------------------*/ -FxaaFloat4 FxaaPixelShader( - // See FXAA Quality FxaaPixelShader() source for docs on Inputs! - // - // Use noperspective interpolation here (turn off perspective interpolation). - // {xy} = center of pixel - FxaaFloat2 pos, - // - // Used only for FXAA Console, and not used on the 360 version. - // Use noperspective interpolation here (turn off perspective interpolation). - // {xy__} = upper left of pixel - // {__zw} = lower right of pixel - FxaaFloat4 fxaaConsolePosPos, - // - // Input color texture. - // {rgb_} = color in linear or perceptual color space - // if (FXAA_GREEN_AS_LUMA == 0) - // {___a} = luma in perceptual color space (not linear) - FxaaTex tex, - // - // Only used on FXAA Console. - // This must be from a constant/uniform. - // This effects sub-pixel AA quality and inversely sharpness. - // Where N ranges between, - // N = 0.50 (default) - // N = 0.33 (sharper) - // {x___} = -N/screenWidthInPixels - // {_y__} = -N/screenHeightInPixels - // {__z_} = N/screenWidthInPixels - // {___w} = N/screenHeightInPixels - FxaaFloat4 fxaaConsoleRcpFrameOpt, - // - // Only used on FXAA Console. - // Not used on 360, but used on PS3 and PC. - // This must be from a constant/uniform. - // {x___} = -2.0/screenWidthInPixels - // {_y__} = -2.0/screenHeightInPixels - // {__z_} = 2.0/screenWidthInPixels - // {___w} = 2.0/screenHeightInPixels - FxaaFloat4 fxaaConsoleRcpFrameOpt2, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_SHARPNESS define. - // It is here now to allow easier tuning. - // This does not effect PS3, as this needs to be compiled in. - // Use FXAA_CONSOLE__PS3_EDGE_SHARPNESS for PS3. - // Due to the PS3 being ALU bound, - // there are only three safe values here: 2 and 4 and 8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // For all other platforms can be a non-power of two. - // 8.0 is sharper (default!!!) - // 4.0 is softer - // 2.0 is really soft (good only for vector graphics inputs) - FxaaFloat fxaaConsoleEdgeSharpness, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD define. - // It is here now to allow easier tuning. - // This does not effect PS3, as this needs to be compiled in. - // Use FXAA_CONSOLE__PS3_EDGE_THRESHOLD for PS3. - // Due to the PS3 being ALU bound, - // there are only two safe values here: 1/4 and 1/8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // The console setting has a different mapping than the quality setting. - // Other platforms can use other values. - // 0.125 leaves less aliasing, but is softer (default!!!) - // 0.25 leaves more aliasing, and is sharper - FxaaFloat fxaaConsoleEdgeThreshold, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE__EDGE_THRESHOLD_MIN define. - // It is here now to allow easier tuning. - // Trims the algorithm from processing darks. - // The console setting has a different mapping than the quality setting. - // This does not apply to PS3, - // PS3 was simplified to avoid more shader instructions. - // 0.06 - faster but more aliasing in darks - // 0.05 - default - // 0.04 - slower and less aliasing in darks - // Special notes when using FXAA_GREEN_AS_LUMA, - // Likely want to set this to zero. - // As colors that are mostly not-green - // will appear very dark in the green channel! - // Tune by looking at mostly non-green content, - // then start at zero and increase until aliasing is a problem. - FxaaFloat fxaaConsoleEdgeThresholdMin -) { -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaNw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xy)); - FxaaFloat lumaSw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xw)); - FxaaFloat lumaNe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zy)); - FxaaFloat lumaSe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zw)); -/*--------------------------------------------------------------------------*/ - FxaaFloat4 rgbyM = FxaaTexTop(tex, pos.xy); - #if (FXAA_GREEN_AS_LUMA == 0) - // TODO Luma - FxaaFloat lumaM = FxaaLuma(rgbyM); - #else - FxaaFloat lumaM = rgbyM.y; - #endif -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxNwSw = max(lumaNw, lumaSw); - lumaNe += 1.0/384.0; - FxaaFloat lumaMinNwSw = min(lumaNw, lumaSw); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxNeSe = max(lumaNe, lumaSe); - FxaaFloat lumaMinNeSe = min(lumaNe, lumaSe); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMax = max(lumaMaxNeSe, lumaMaxNwSw); - FxaaFloat lumaMin = min(lumaMinNeSe, lumaMinNwSw); -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMaxScaled = lumaMax * fxaaConsoleEdgeThreshold; -/*--------------------------------------------------------------------------*/ - FxaaFloat lumaMinM = min(lumaMin, lumaM); - FxaaFloat lumaMaxScaledClamped = max(fxaaConsoleEdgeThresholdMin, lumaMaxScaled); - FxaaFloat lumaMaxM = max(lumaMax, lumaM); - FxaaFloat dirSwMinusNe = lumaSw - lumaNe; - FxaaFloat lumaMaxSubMinM = lumaMaxM - lumaMinM; - FxaaFloat dirSeMinusNw = lumaSe - lumaNw; - if(lumaMaxSubMinM < lumaMaxScaledClamped) - { - #if (FXAA_DISCARD == 1) - FxaaDiscard; - #else - return rgbyM; - #endif - } -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir; - dir.x = dirSwMinusNe + dirSeMinusNw; - dir.y = dirSwMinusNe - dirSeMinusNw; -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir1 = normalize(dir.xy); - FxaaFloat4 rgbyN1 = FxaaTexTop(tex, pos.xy - dir1 * fxaaConsoleRcpFrameOpt.zw); - FxaaFloat4 rgbyP1 = FxaaTexTop(tex, pos.xy + dir1 * fxaaConsoleRcpFrameOpt.zw); -/*--------------------------------------------------------------------------*/ - FxaaFloat dirAbsMinTimesC = min(abs(dir1.x), abs(dir1.y)) * fxaaConsoleEdgeSharpness; - FxaaFloat2 dir2 = clamp(dir1.xy / dirAbsMinTimesC, -2.0, 2.0); -/*--------------------------------------------------------------------------*/ - FxaaFloat2 dir2x = dir2 * fxaaConsoleRcpFrameOpt2.zw; - FxaaFloat4 rgbyN2 = FxaaTexTop(tex, pos.xy - dir2x); - FxaaFloat4 rgbyP2 = FxaaTexTop(tex, pos.xy + dir2x); -/*--------------------------------------------------------------------------*/ - FxaaFloat4 rgbyA = rgbyN1 + rgbyP1; - FxaaFloat4 rgbyB = ((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25); -/*--------------------------------------------------------------------------*/ - #if (FXAA_GREEN_AS_LUMA == 0) - // TODO Luma - float lumaB = FxaaLuma(rgbyB); - #else - float lumaB = rgbyB.y; - #endif - if((lumaB < lumaMin) || (lumaB > lumaMax)) - rgbyB.xyz = rgbyA.xyz * 0.5; - // - return rgbyB; -} -/*==========================================================================*/ - -uniform sampler2D f_color; - -uniform vec2 screenSize; - -#define edgeSharpness 7.0 -#define edgeThreshold 0.1 -#define edgeThresholdMin 0.005 - -void main(){ - vec4 posPos; - posPos.xy = pos - (0.6 / screenSize); - posPos.zw = pos + (0.6 / screenSize); - vec4 rcpFrameOpt; - rcpFrameOpt.xy = vec2(-0.50, -0.50) / screenSize; - rcpFrameOpt.zw = vec2( 0.50, 0.50) / screenSize; - vec4 rcpFrameOpt2; - rcpFrameOpt2.xy = vec2(-2.0, -2.0) / screenSize; - rcpFrameOpt2.zw = vec2( 2.0, 2.0) / screenSize; - - fragColor = vec4(FxaaPixelShader(pos, posPos, f_color, rcpFrameOpt, rcpFrameOpt2, edgeSharpness, edgeThreshold, edgeThresholdMin).rgb, 1.0); -} diff --git a/desktopRuntime/resources/glsl/occl.glsl b/desktopRuntime/resources/glsl/occl.glsl deleted file mode 100644 index df74763..0000000 --- a/desktopRuntime/resources/glsl/occl.glsl +++ /dev/null @@ -1,25 +0,0 @@ -#line 2 - -precision highp int; -precision highp sampler2D; -precision highp float; - -#ifdef CC_VERT -uniform mat4 matrix_m; -uniform mat4 matrix_p; - -in vec3 a_vert; - -void main(){ - gl_Position = (matrix_p * (matrix_m * vec4(a_vert, 1.0))); -} -#endif - -#ifdef CC_FRAG - -out vec4 fragColor; - -void main(){ - fragColor = vec4(1.0); -} -#endif diff --git a/desktopRuntime/resources/glsl/pvert.glsl b/desktopRuntime/resources/glsl/pvert.glsl deleted file mode 100644 index ce17a2c..0000000 --- a/desktopRuntime/resources/glsl/pvert.glsl +++ /dev/null @@ -1,13 +0,0 @@ -#line 0 - -precision lowp int; -precision lowp sampler2D; -precision lowp float; - -in vec2 a_pos; - -out vec2 pos; - -void main(){ - gl_Position = vec4((pos = a_pos) * 2.0 - 1.0, 0.0, 1.0); -} diff --git a/src/main/java/net/minecraft/src/EntityRenderer.java b/src/main/java/net/minecraft/src/EntityRenderer.java index 8546933..de4b9c5 100644 --- a/src/main/java/net/minecraft/src/EntityRenderer.java +++ b/src/main/java/net/minecraft/src/EntityRenderer.java @@ -23,7 +23,6 @@ public class EntityRenderer { private int field_1386_j; private Entity field_1385_k = null; private boolean cloudFog = false; - private double cameraZoom = 1.0D; private double cameraYaw = 0.0D; private double cameraPitch = 0.0D; private long field_1384_l = System.currentTimeMillis(); @@ -250,14 +249,8 @@ public class EntityRenderer { if(this.mc.gameSettings.anaglyph) { GL11.glTranslatef((float)(-(var2 * 2 - 1)) * var3, 0.0F, 0.0F); } - - if(this.cameraZoom != 1.0D) { - GL11.glTranslatef((float)this.cameraYaw, (float)(-this.cameraPitch), 0.0F); - GL11.glScaled(this.cameraZoom, this.cameraZoom, 1.0D); - GLU.gluPerspective(this.func_914_d(var1), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F); - } else { - GLU.gluPerspective(this.func_914_d(var1), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F); - } + + GLU.gluPerspective(this.func_914_d(var1), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F); GL11.glMatrixMode(GL11.GL_MODELVIEW); GL11.glLoadIdentity(); @@ -467,7 +460,7 @@ public class EntityRenderer { GL11.glDepthMask(true); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_BLEND); - if(this.cameraZoom == 1.0D && this.mc.objectMouseOver != null && !var2.isInsideOfMaterial(Material.water)) { + if(this.mc.objectMouseOver != null && !var2.isInsideOfMaterial(Material.water)) { GL11.glDisable(GL11.GL_ALPHA_TEST); var3.func_959_a(var2, this.mc.objectMouseOver, 0, var2.inventory.getCurrentItem(), var1); var3.drawSelectionBox(var2, this.mc.objectMouseOver, 0, var2.inventory.getCurrentItem(), var1); @@ -483,10 +476,8 @@ public class EntityRenderer { var3.func_4141_b(var1); GL11.glDisable(GL11.GL_FOG); this.setupFog(1, var1); - if(this.cameraZoom == 1.0D) { - GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); - this.func_4135_b(var1, var11); - } + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + this.func_4135_b(var1, var11); if(!this.mc.gameSettings.anaglyph) { return; } diff --git a/src/main/java/net/minecraft/src/WorldRenderer.java b/src/main/java/net/minecraft/src/WorldRenderer.java index 9ef10ee..b8a2539 100644 --- a/src/main/java/net/minecraft/src/WorldRenderer.java +++ b/src/main/java/net/minecraft/src/WorldRenderer.java @@ -68,9 +68,9 @@ public class WorldRenderer { this.field_1753_k = var3 - this.field_1750_n; float var4 = 2.0F; this.field_1736_v = AxisAlignedBB.getBoundingBox((double)((float)var1 - var4), (double)((float)var2 - var4), (double)((float)var3 - var4), (double)((float)(var1 + this.field_1758_f) + var4), (double)((float)(var2 + this.field_1757_g) + var4), (double)((float)(var3 + this.field_1756_h) + var4)); - GL11.glNewList(this.field_1744_C + 2, GL11.GL_COMPILE); - RenderItem.renderAABB(AxisAlignedBB.getBoundingBoxFromPool((double)((float)this.field_1752_l - var4), (double)((float)this.field_1751_m - var4), (double)((float)this.field_1750_n - var4), (double)((float)(this.field_1752_l + this.field_1758_f) + var4), (double)((float)(this.field_1751_m + this.field_1757_g) + var4), (double)((float)(this.field_1750_n + this.field_1756_h) + var4))); - GL11.glEndList(); + //GL11.glNewList(this.field_1744_C + 2, GL11.GL_COMPILE); + //RenderItem.renderAABB(AxisAlignedBB.getBoundingBoxFromPool((double)((float)this.field_1752_l - var4), (double)((float)this.field_1751_m - var4), (double)((float)this.field_1750_n - var4), (double)((float)(this.field_1752_l + this.field_1758_f) + var4), (double)((float)(this.field_1751_m + this.field_1757_g) + var4), (double)((float)(this.field_1750_n + this.field_1756_h) + var4))); + //GL11.glEndList(); this.MarkDirty(); } }