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

RareScrap

Каменная лига
Сообщения
635
Лучшие ответы
20
Симпатии
151
#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

Каменная лига
Сообщения
635
Лучшие ответы
20
Симпатии
151
#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,284
Лучшие ответы
40
Симпатии
214
#3
Скорее всего строка сама по себе рисуется нормально, но майн что-то делает с цветовой матрицей перед рендером... От того и эффект.
Ты просто вырубил все изменения...
Возможно майн перед отрисовкой твоей строки, например, затемнял задний фон.
...
Или это была тень от чего-то ) Например, ты стоял под деревом )))
 

Dahaka

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

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

RareScrap

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

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

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

Liahim

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

RareScrap

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

Agravaine

Команда форума
Сообщения
4,600
Лучшие ответы
198
Симпатии
655
#8
Перед отрисовкой текста вырубай свет, после - врубай. Только не в методе своем для каждой строки, а для всех.
 

RareScrap

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

Agravaine

Команда форума
Сообщения
4,600
Лучшие ответы
198
Симпатии
655
#10
Вырубил свет
Отрисовал строку 1
Отрисовал строку 2
Отрисовал строку 3
Врубил свет
 

RareScrap

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

Agravaine

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