Bug Description
While viewing a sign with coloured text, you are unable to see the text colour from the front of the sign on macOS / OS X. This effects every Minecraft version to date (with coloured sign text of course), regardless of macOS version, Java version, or graphics driver version. This bug seems to only effect older mac processors. This bug does not effect Minecraft running on Windows or any version of Linux (that I know of).
Bug Example
Simply spawn in a sign with coloured text on macOS / OS X and observe the colour of the text while viewing the front of the sign straight-on and from a sharp angle.
Bug Cause
This bug is caused by incorrectly defining the surface normal vector of the front of the sign while rendering the text on a sign. This causes the surface "face" to be defined as the back of the sign, rather than the front (where the text is visible). The OpenGL implementation on Windows and Linux appears to have a relaxed policy for applying colour to the surface, while the OpenGL implemenation on macOS has a stricter policy for applying the colour. It appears that OpenGL on macOS does not apply the colour if the surface is not "visible", which is why the colour is only applied on sharp angles to the sign, where part of the surface would be visible.
Bug Fix
This bug can easily be fixed by properly defining the surface normal while rendering the text on the sign. This change does not break rendering behaviour on Windows and Linux (tested on Windows 10 and Arch Linux), while fixing the text rendering on macOS (tested on OS X Mountain Lion, OS X Mavericks, OS X Yosemite, OS X El Capitan, macOS Sierra, macOS High Sierra, and a beta of macOS Mojave).
How to Fix - MCP Mappings
Minecraft 1.12.2
Navigate to:
net.minecraft.client.renderer.tileentity.TileEntitySignRenderer
Find line 76:
GlStateManager.glNormal3f(0.0F, 0.0F, -0.010416667F);
Change line 76 to:
GlStateManager.glNormal3f(0.0F, 0.0F, 0.010416667F);
How to Fix - Obfuscated Game
Minecraft 1.13.1 (Same obfuscation as Minecraft 1.13.1-pre2)
Navigate to:
cwg
Find line 43:
ctz.a(0.0F, 0.0F, -0.010416667F);
Change line 43 to:
ctz.a(0.0F, 0.0F, -0.010416667F);
Minecraft 1.13.1-pre2 (Same obfuscation as Minecraft 1.13.1-pre1)
Navigate to:
cwg
Find line 43:
ctz.a(0.0F, 0.0F, -0.010416667F);
Change line 43 to:
ctz.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.13.1-pre1
Navigate to:
cwg
Find line 67:
ctz.a((float)0.0f, (float)0.0f, (float)-0.010416667f);
Change line 67 to:
ctz.a((float)0.0f, (float)0.0f, (float)0.010416667f);
Minecraft 18w33a
Navigate to:
cwf
Find line 67:
cty.a((float)0.0f, (float)0.0f, (float)-0.010416667f);
Change line 67 to:
cty.a((float)0.0f, (float)0.0f, (float)0.010416667f);
Minecraft 18w32a (Same obfuscation as Minecraft 18w31a)
Navigate to:
cwe
Find line 67:
ctx.a(0.0F, 0.0F, -0.010416667F);
Change line 67 to:
ctx.a(0.0F, 0.0F, 0.010416667F);
Minecraft 18w31a
Navigate to:
cwe
Find line 64:
ctx.a(0.0F, 0.0F, -0.010416667F);
Change line 64 to:
ctx.a(0.0F, 0.0F, 0.010416667F);
Minecraft 18w30b
Navigate to:
cvz
Find line 64:
cts.a(0.0F, 0.0F, -0.010416667F);
Change line 64 to:
cts.a(0.0F, 0.0F, 0.010416667F);
Minecraft 18w30a
Navigate to:
cvy
Find line 64:
ctr.a(0.0F, 0.0F, -0.010416667F);
Change line 64 to:
ctr.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.13
Navigate to:
cvw
Find line 64:
ctp.a(0.0F, 0.0F, -0.010416667F);
Change line 64 to:
ctp.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.13-pre10
Navigate to:
cvu
Find line 64:
ctn.a(0.0F, 0.0F, -0.010416667F);
Change line 64 to:
ctn.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.13-pre10
Navigate to:
cvu
Find line 64:
ctn.a(0.0F, 0.0F, -0.010416667F);
Change line 64 to:
ctn.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.13-pre9 (Same obfuscation as Minecraft 1.13-pre8)
Navigate to:
cvs
Find line 64:
ctl.a(0.0F, 0.0F, -0.010416667F);
Change line 64 to:
ctl.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.13-pre8
Navigate to:
cvs
Find line 64:
ctl.a(0.0F, 0.0F, -0.010416667F);
Change line 64 to:
ctl.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.13-pre7
Navigate to:
cvi
Find line 64:
ctb.a(0.0F, 0.0F, -0.010416667F);
Change line 64 to:
ctb.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.13-pre6
Navigate to:
cva
Find line 64:
cst.a(0.0F, 0.0F, -0.010416667F);
Change line 64 to:
cst.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.12.2 (Same obfuscation as Minecraft 1.12.1)
Navigate to:
bxf
Find line 75:
bus.a(0.0F, 0.0F, -0.010416667F);
Change line 75 to:
bus.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.12.1
Navigate to:
bxf
Find line 75:
bus.a(0.0F, 0.0F, -0.010416667F);
Change line 75 to:
bus.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.12
Navigate to:
bxd
Find line 75:
buq.a(0.0F, 0.0F, -0.010416667F);
Change line 75 to:
buq.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.11.2 (Same obfuscation as Minecraft 1.11.1)
Navigate to:
bss
Find line 75:
bqg.a(0.0F, 0.0F, -0.010416667F);
Change line 75 to:
bqg.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.11.1
Navigate to:
bss
Find line 75:
bqg.a(0.0F, 0.0F, -0.010416667F);
Change line 75 to:
bqg.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.11
Navigate to:
bsq
Find line 75:
bqe.a(0.0F, 0.0F, -0.010416667F);
Change line 75 to:
bqe.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.10.2 (Same obfuscation as Minecraft 1.10.1)
Navigate to:
bqm
Find line 75:
bob.a(0.0F, 0.0F, -0.010416667F);
Change line 75 to:
bob.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.10.1 (Same obfuscation as Minecraft 1.10)
Navigate to:
bqm
Find line 75:
bob.a(0.0F, 0.0F, -0.010416667F);
Change line 75 to:
bob.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.10
Navigate to:
bqm
Find line 75:
bob.a(0.0F, 0.0F, -0.010416667F);
Change line 75 to:
bob.a(0.0F, 0.0F, 0.010416667F);
Minecraft 1.9.4 (Same obfuscation as Minecraft 1.9.3)
Navigate to:
bpq
Find line 75:
bnf.a(0.0F, 0.0F, -1.0F * ☃);
Change line 75 to:
bnf.a(0.0F, 0.0F, ☃);
Minecraft 1.9.3 (Same obfuscation as Minecraft 1.9.2)
Navigate to:
bpq
Find line 75:
bnf.a(0.0F, 0.0F, -1.0F * ☃);
Change line 75 to:
bnf.a(0.0F, 0.0F, ☃);
Minecraft 1.9.2 (Same obfuscation as Minecraft 1.9.1)
Navigate to:
bpq
Find line 75:
bnf.a(0.0F, 0.0F, -1.0F * ☃);
Change line 75 to:
bnf.a(0.0F, 0.0F, ☃);
Minecraft 1.9.1
Navigate to:
bpq
Find line 75:
bnf.a(0.0F, 0.0F, -1.0F * ☃);
Change line 75 to:
bnf.a(0.0F, 0.0F, ☃);
Minecraft 1.9
Navigate to:
bpt
Find line 75:
bni.a(0.0F, 0.0F, -1.0F * ☃);
Change line 75 to:
bni.a(0.0F, 0.0F, ☃);
Minecraft 1.8.9
Navigate to:
bhj
Find line 77:
GL11.glNormal3f(0.0F, 0.0F, -1.0F * ☃);
Change line 77 to:
GL11.glNormal3f(0.0F, 0.0F, ☃);
Minecraft 1.8
Navigate to:
cnv
Find line 77:
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
Change line 77 to:
GL11.glNormal3f(0.0F, 0.0F, f3);
Minecraft 1.7.10
Navigate to:
bmr
Find line 54:
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
Change line 54 to:
GL11.glNormal3f(0.0F, 0.0F, f3);
Minecraft 1.6.4
Navigate to:
bja
Find line 53:
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
Change line 53 to:
GL11.glNormal3f(0.0F, 0.0F, f3);
Minecraft 1.5.2
Navigate to:
bja
Find line 50:
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
Change line 50 to:
GL11.glNormal3f(0.0F, 0.0F, f3);
Minecraft 1.4.7
Navigate to:
bdt
Find line 50:
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
Change line 50 to:
GL11.glNormal3f(0.0F, 0.0F, f3);
Minecraft 1.3.2
Navigate to:
axq
Find line 50:
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
Change line 50 to:
GL11.glNormal3f(0.0F, 0.0F, f3);
Minecraft 1.2.5
Navigate to:
ll
Find line 51:
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
Change line 51 to:
GL11.glNormal3f(0.0F, 0.0F, f3);
Minecraft 1.1
Navigate to:
ku
Find line 51:
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
Change line 51 to:
GL11.glNormal3f(0.0F, 0.0F, f3);
Minecraft 1.0
Navigate to:
aeu
Find line 51:
GL11.glNormal3f(0.0F, 0.0F, -1.0F * f3);
Change line 51 to:
GL11.glNormal3f(0.0F, 0.0F, f3);
Notice the sign of the z-coordinate of the normal vector. This change will correctly define the surface normal to be the front of the sign, fixing coloured signs on macOS.
Linked issues
is duplicated by 15
relates to 2
Attachments
Comments 56
Not true actually. Coloured signs are vanilla, they just cannot be placed without an external editor (like MCEdit). You do not have to mod your game for this to happen. Oh, and confirmed on a MacBook Air running Mountain Lion and Minecraft 1.5.1
This happens to me in both singleplayer and multiplayer in 1.6.2 It only happens on my MacBook Air, not on my brothers PC
PLEASE FIX THIS, THIS IS THE MOST ANNOYING AND INCONVENIENT BUG IVE EVER EXPERIENCED WITH MINECRAFT!!!
This is NOT a problem in Vanilla Minecraft and cannot be reproduced without any external editors. Therefor it's not a valid report for this tracker.
This bug appears to have been fixed in 19w39a. I tested it on my old macbook and the sign rendering was broken in 19w38b but worked fine in 19w39a and 19w40a. Looking at the source, it looks like they removed the offending normal3f() in 19w39a.
Although, with all the changes to the rendering and new issues with signs, I wouldn't be surprised if they reverted this change back, reintroducing the bug. But for now, it appears to be fixed.
Any reason you added 19w39a and 19w40a yesterday? Were you able to temporarily reproduce it or something else odd like that? Or was it just by reflex?
I tried to test it yesterday but I was still running an older snapshot for some reason. I attempted to remove those versions when I realized but I guess it didn't work. The only version I am able to change is 1.14.4 (where the bug still occurs), all the others versions are archived and I cannot change them.
I was not able to reproduce this bug in 19w39a or 19w40a.
This venue is for vanilla bugs only. Color text on signs is not in the current release of Minecraft. It has been noted but I will close this as invalid.