mojira.dev
MC-1313

macOS: Incorrect sign surface normal causes the text colour to not be applied properly

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

MC-104 Color of text on signs only appears at certain extreme angles, but not while directly looking at it. Resolved MC-8710 Sign Bug Resolved MC-12135 Signs only coloured at extreme viewing angles. Resolved MC-21319 [Servers] While on a Mac, if there is a sign with colored text in it, you are only able to see the color at an angle. Resolved MC-25081 Graphics Glitch Resolved

Attachments

Comments 56

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.

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.

46 more comments

You really seem to know your stuff.

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.

Great, thanks for testing!

Nathan Wilson

Jordin Smith

(Unassigned)

Confirmed

Rendering

Mac, MacBook, MacBookPro, Macintosh, MacintoshComputer, OSX, SignText, Signs, Text, color, colour, macOS, normal, rendering, surface

Minecraft 1.4.2, Minecraft 14w26c, Minecraft 14w27b, Minecraft 14w28b, Minecraft 1.8, ..., Minecraft 1.14.2, Minecraft 1.14.3 Pre-Release 1, Minecraft 1.14.3 Pre-Release 3, 1.14.4, 19w39a

Minecraft 1.8, 19w39a

Retrieved