FontRenderer#drawString() отказывается рисовать белую строку

RareScrap

Каменная лига
Сообщения
486
Лучшие ответы
14
Симпатии
99
#1
Версия Minecraft
1.7.10
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
FontRenderer рисует строки любого цвета, кроме белого. Я наваял такой утилитный метод, который рисует строку без тени:
Java:
public static void drawCenteredStringWithoutShadow(FontRenderer fontRenderer, String str, int x, int y, int color){
    fontRenderer.drawString(str, x - fontRenderer.getStringWidth(str) / 2, y, color, false);
}
Просто до безобразия. Но при попытке отрисовать цвет 0xFFFFFF я получаю едва различимый оттенок серого:
2019-04-16_17-48-11.png

Такой подставы не ожидал. В чем может быть дело?
 

RareScrap

Каменная лига
Сообщения
486
Лучшие ответы
14
Симпатии
99
#2
Я ааабсолютно хз что именно я сделал, но перед рендером я добавил это:
Java:
public static void drawCenteredStringWithoutShadow(FontRenderer fontRenderer, String str, int x, int y, int color){
    GL11.glDisable(GL11.GL_LIGHTING);
    fontRenderer.drawString(str, x - fontRenderer.getStringWidth(str) / 2, y, color, false);
}
Стало норм, но я не могу сказать что это хорошее решение, т.к. банально не понимаю что я сделал. Повелители OpenGL'а, пожалуйста объясните.
 

Liahim

Золотая лига
Сообщения
3,136
Лучшие ответы
32
Симпатии
183
#3
Скорее всего строка сама по себе рисуется нормально, но майн что-то делает с цветовой матрицей перед рендером... От того и эффект.
Ты просто вырубил все изменения...
Возможно майн перед отрисовкой твоей строки, например, затемнял задний фон.
...
Или это была тень от чего-то ) Например, ты стоял под деревом )))
 

Dahaka

Золотая лига
Сообщения
2,352
Лучшие ответы
82
Симпатии
279
#4
Это не хорошее решение из-за того, что GL11.glDisable(GL11.GL_LIGHTING); лежит внутри метода drawCenteredStringWithoutShadow.
А так все зависит от того, куда ты хукнулся. И нужно смотреть на текущее состояние. Но раз это заработало, то значит майн еще не выключил источники освещения вокруг предметов или модельки игрока. Либо ты вставляешь свой код между отрисовками стаков. Ищи что-то типа enable/disableStandartItemLighting, не помню точное название.

майн что-то делает с цветовой матрицей перед рендером
Что за зверь такой?
 

RareScrap

Каменная лига
Сообщения
486
Лучшие ответы
14
Симпатии
99
#5
Это не хорошее решение из-за того, что GL11.glDisable(GL11.GL_LIGHTING); лежит внутри метода drawCenteredStringWithoutShadow.
Ну так это мой метод. Кастомный. Что в этом плохого?

А так все зависит от того, куда ты хукнулся.
Я никуда не хукался. Просто намутил статичный метод и вызываю его в GuiScreenEvent.DrawScreenEvent

значит майн еще не выключил источники освещения вокруг предметов или модельки игрока
Неужели мне нужно все это учитывать чтобы просто нарисовать строку в гуи?
 

Liahim

Золотая лига
Сообщения
3,136
Лучшие ответы
32
Симпатии
183
#6

RareScrap

Каменная лига
Сообщения
486
Лучшие ответы
14
Симпатии
99
#7
Короче, уважаемые форумчане. Как мне решить эту задачу красиво и не зашкварно?
 

Agravaine

Алмазная лига
Сообщения
4,253
Лучшие ответы
165
Симпатии
512
#8
Перед отрисовкой текста вырубай свет, после - врубай. Только не в методе своем для каждой строки, а для всех.
 

RareScrap

Каменная лига
Сообщения
486
Лучшие ответы
14
Симпатии
99
#9
Только не в методе своем для каждой строки, а для всех
Вот тут не понял. Как я могу вырубить свет для всех строк? И зачем? Мне то нужно только для моей строки.
 

Agravaine

Алмазная лига
Сообщения
4,253
Лучшие ответы
165
Симпатии
512
#10
Вырубил свет
Отрисовал строку 1
Отрисовал строку 2
Отрисовал строку 3
Врубил свет
 

RareScrap

Каменная лига
Сообщения
486
Лучшие ответы
14
Симпатии
99
#11
Вырубил свет
Отрисовал строку 1
Отрисовал строку 2
Отрисовал строку 3
Врубил свет
Понял, а почему именно так? Почему не нужно врубать свет после каждой отрисовки?
 

Agravaine

Алмазная лига
Сообщения
4,253
Лучшие ответы
165
Симпатии
512
#12
Потому что вызовы дорогостоящие и лучше сводить их к минимуму. Зачем вырубать, если и так вырублено?)
 
Сверху