Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Визуальная часть CometRenderer — рендер система под fabric 1.21.1—26.1-snapshot

Открою секрет, рендер 2д и рендер 3д никак не отличается. Если для тебя 2д и 3д это земля и небо, то ты попуск.
Да-да, ахуенно не отличается, всего-то 2 матрицы добавляются допом и число вершины минимум в 3 раза увеличивается. Действительно ничего...
Ты даже сообщение до конца дочитать не можешь лол.
Блять, молодец, реализовал плагином то что и так должно быть по стандарту. и опять же это надо смотреть, как ты это сделал, у меня от твоего говнокода просто глаза вытекают. Смею эмпирически предположить, что реализация батчинга у тебя на уровне твоего остального рендера. Кароче.
Архитектура - кал, рендер - кал, автор - ну вы понял xDDDDD.
Чувак, рендер вендокса в экспе даже премиальнее и умнее твоего спроектирован))))
 
Да-да, ахуенно не отличается, всего-то 2 матрицы добавляются
Ой, как сложно.
число вершины минимум в 3 раза увеличивается.
Ну если ты хочешь хотябы обдристанный кубик отрисовать то тебе конечно нужно будет указать вершины для 6 ректов, хотя в грамотных руках можно обойтись 8 вершинами и буффером индексов.

Количество вершин никак к рендеру не относятся, ему поебать сколько ты вершин хочешь отрисовать, главное указать в сборщике меша нужный размер аллокатора (если тебе будет мало 786432 байт, которые устанавливаются для аллокатора по умолчанию в методе создания сборщика меша).
Смею эмпирически предположить, что реализация батчинга у тебя на уровне твоего остального рендера.
Оказывается добавлять вершины в сборщик меша и не билдить его до того времени, когда тебе это не понадобится, это очень сложно((((((((( Представить не могу как сложно делать батчинг((((((((((((((
и опять же это надо смотреть, как ты это сделал, у меня от твоего говнокода просто глаза вытекают.
Боюсь представить, какой калл ты напишешь, а точно, не напишешь, ты же на майн рендере сидишь.
Хотя если бы я увидел код какого-нибудь твоего проекта, то я бы увидел примерно следующее:
Снимок экрана 2026-01-08 174210.png
4
 
Ты даже сообщение до конца дочитать не можешь лол.

Открою секрет, рендер 2д и рендер 3д никак не отличается. Если для тебя 2д и 3д это земля и небо, то ты попуск.

Одна строчка кода не будет оправдывать затраты на пересоздание целого буффера. Я с тем же успехом одной строчкой кода обновлю униформу, а не целый буффер, плюсом мне никто не запрещает использовать как и буфферы, так и обычные униформы, а не сидеть и жевать один хлеб без сахара, как это будешь делать ты.

ДАНУ НАХУЙ, А Я НЕ ЗНАЮ))))))
Я про то, что если твой клиент будет создавать именно СВОИ элементы формата, и найдутся другие такие-же приколисты, которые будут создавать СВОИ элементы, то рано или поздно майнкрафт может воткнуть нож в спину. Хотя на это шанс и маленький, но я бы не держал такой прикол у себя за спиной)
мне лень читать твой высер, отвечу кратко, без воды, твой рендер никому не нужной залупы. и хватит тут слезы пускать как ебанная девочка, реально мальчик прекрати
 
Последнее редактирование:
гпт не напишет, а какой нибудь клауд опус или гемини про напишет)
но при этом каждый второй человек пишет в комменты под постом "ЭТО ЧСАТ ЖПТ, УДАЛИ ПРОЕКТ!1!1!1!"
 
Открою секрет, рендер 2д и рендер 3д никак не отличается. Если для тебя 2д и 3д это земля и небо, то ты попуск.
ебать ты фрик)))) после этих слов можешь нахуй удалять абсолютно все свои проекты, все ide и позорно играть в танки онлайн, раз ты ёбаный неуч, который не только рендер без ии написать не смог, да ещё и спизданул такой бред
2д - плоская фигура, 3д - объемное тело, чувак это 1 по 3 класс :roflanEbalo:
 
ебать ты фрик)))) после этих слов можешь нахуй удалять абсолютно все свои проекты, все ide и позорно играть в танки онлайн, раз ты ёбаный неуч, который не только рендер без ии написать не смог, да ещё и спизданул такой бред
2д - плоская фигура, 3д - объемное тело, чувак это 1 по 3 класс :roflanEbalo:
'Бляяяять, я не могу изменить матрицу, работать с глубиной и с теми же вершинами, но с дополнительной Z координатой, надо написать ещё один бессмысленный коментарий с подтверждением того, какой же я тупой, и никогда не выберусь дальше югейма.'

Я не понимаю кем надо быть, что бы считать, что отрисовка в 3д это что-то пиздец сложное. Вам непосильно отрисовать объемную модель вместо плоской? Трудно просто побольше вершин добавить? Ладно куллинг, это отдельная тема, но блять что бы рендерить в 3д он необязателен, если ты не рендеришь что-то невъебическое, а в ракмках говнокубиков тебе что-то большое рендерить не нужно будет это 100%.

Все трудности с отрисовкой 3д берёт на себя OpenGL, потому-что имеено твоя видюха занимается преобразованием 3д координат в 2д, исправляет семплинг текстуры для искаженных объектов (например, боковая грань тела, на которую ты смотришь под углом) и прочей хуйнёй. Ты всем этим не занимается, ты нихуя не делаешь кроме изменения матрицы, работой с глубиной, вершинами и прочей мелочевкой, которая даже в счёт не ставится.

Если в ваших говноклиентах 3д рендер это что-то очень сложное, то мне вас жаль (нет).
 
Последнее редактирование:
братан а ты не в курсе что ты на 2д фигуры тоже можешь это использовать

если это вам ничего говорит то вам надо научиться использовать то что мать дала а именно мозг но походу с этим у вас есть какие то проблемы :catjam:
ciS9Fi9.png
 
'Бляяяять, я не могу изменить матрицу, работать с глубиной и с теми же вершинами, но с дополнительной Z координатой, надо написать ещё один бессмысленный коментарий с подтверждением того, какой же я тупой, и никогда не выберусь дальше югейма.'

Я не понимаю кем надо быть, что бы считать, что отрисовка в 3д это что-то пиздец сложное. Вам непосильно отрисовать объемную модель вместо плоской? Трудно просто побольше вершин добавить? Ладно куллинг, это отдельная тема, но блять что бы рендерить в 3д он необязателен, если ты не рендеришь что-то невъебическое, а в ракмках говнокубиков тебе что-то большое рендерить не нужно будет это 100%.

Все трудности с отрисовкой 3д берёт на себя, потому-что имеено твоя видюха занимается преобразованием 3д координат в 2д, исправляет семплинг текстуры для искаженных объектов (например, боковая грань тела, на которую ты смотришь под углом) и прочей хуйнёй. Ты всем этим не занимается, ты нихуя не делаешь кроме изменения матрицы, работой с глубиной, вершинами и прочей мелочевкой, которая даже в счёт не ставится.

Если в ваших говноклиентах 3д рендер это что-то очень сложное, то мне вас жаль (нет).
лучший рендер у екпенсива был мне очень нравится
 
братан а ты не в курсе что ты на 2д фигуры тоже можешь это использовать

если это вам ничего говорит то вам надо научиться использовать то что мать дала а именно мозг но походу с этим у вас есть какие то проблемы :catjam:
ciS9Fi9.png
Ты прикрепил логику преобразования из 3д координат в 2д координаты. При чём тут описанные мною методы? Я надеюсь тебе кто-то одолжит "мозг" и ты поймешь что написал...
 
'Бляяяять, я не могу изменить матрицу, работать с глубиной и с теми же вершинами, но с дополнительной Z координатой, надо написать ещё один бессмысленный коментарий с подтверждением того, какой же я тупой, и никогда не выберусь дальше югейма.'

Я не понимаю кем надо быть, что бы считать, что отрисовка в 3д это что-то пиздец сложное. Вам непосильно отрисовать объемную модель вместо плоской? Трудно просто побольше вершин добавить? Ладно куллинг, это отдельная тема, но блять что бы рендерить в 3д он необязателен, если ты не рендеришь что-то невъебическое, а в ракмках говнокубиков тебе что-то большое рендерить не нужно будет это 100%.

Все трудности с отрисовкой 3д берёт на себя OpenGL, потому-что имеено твоя видюха занимается преобразованием 3д координат в 2д, исправляет семплинг текстуры для искаженных объектов (например, боковая грань тела, на которую ты смотришь под углом) и прочей хуйнёй. Ты всем этим не занимается, ты нихуя не делаешь кроме изменения матрицы, работой с глубиной, вершинами и прочей мелочевкой, которая даже в счёт не ставится.

Если в ваших говноклиентах 3д рендер это что-то очень сложное, то мне вас жаль (нет).
сука да тебе оскар надо выдать, так скрытно сьебаться с темы на тему и пытаться выебнуться хоть каким-то позорными знаниями :goplol:
ты даже не понял че я тебе написал идиоту, смог только напрячь извилины и высрать какую-то неведомую хуйню
кто и что тебе про сложность говорил если речь шла о разнице между 2д и 3д рендером, или ты это так выебнуться решил тем чему тебя научил клауд и гемини в процессе пастинга своего "премиального" рендера?):whyRly:

"никогда не выберусь дальше югейма"
до моих знаний и успехов тебе как инвалиду от америки до китая)
 
бля ну хочет обновлять пускай обновляет че приебались до него епта. все что нужно было сказать уже 10 раз сказано, вы заебали тут хуйню разгонять дальше и апать тему.
 
Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.

Что за CometRenderer?


Данный проект представляет из себя достаточно мощную по производительности и возможному функционалу рендер библиотеку, которая будет гораздо лучше, чем обычный рендер майнкрафта. Предназначена же она на данный момент для майнкрафта 1.21.8, 1.21.11 fabric, 26.1-snapshot-1 fabric, 26.1-snapshot-2 fabric, а так же может использоваться за пределами майна.

Возможности CometRender'a и чем же он лучше обычного майнкрафт рендера

  • Оптимизация работы с униформами:
    В майнкрафте униформы загружаются в GPU при каждой отрисовке. В CometRenderer униформы загружаются на GPU только после того, как их значение было изменено.
  • Оптимизация отрисовки:
    Отрисовка происходит без каких-либо мусорных действий. Так же библиотека поддерживает отрисовку не только своего меша, но еще и BuiltBuffer майнкрафта.
  • Более удобная загрузка данных:
    В майнкрафте загрузка кода шейдеров происходит через Identifier, что не очень удобно, когда ты хочешь загрузить шейдер с необычного места расположения.
    В CometRenderer есть реализация CometLoader, при помощи которой можно создать кастомный загрузчик данных, тем самым загружая код шейдера тем способом, которым вы захотите. По умолчанию есть следующие загрузчики, распологающиеся в классе CometLoaders:
    IN_JAR, INPUT_STREAM, URI.
  • Создание кастомных форматов вершин (VertexFormat):
    Хотя в майнкрафте есть тоже что-то похожее, однако в CometRenderer это сделано на более высоком уровне.

    В майнкрафте форматы вершин создаются при помощи элементов вершин, которые создаются и хранятся отдельно от форматов, тем более их можно создать не больше 32. В данной библиотеке элементы вершин создаются внутри формата, тем самым можно делать самые разнообразные форматы вершин. (с этой реализацией можно создать шейдер и формат вершин, что бы за 1 draw метод отрисовывать множество ректов с разным размером, цветом, закруглением, с включенным оутлайном или нет и его размером).

    Например, вот код для создание формата вершины, который я использую в своем клиенте для отрисовки закругленных ректов:
    ROUNDED_RECT VertexFormat:
    Expand Collapse Copy
    public static final VertexFormat ROUNDED_RECT = VertexFormat.builder()
                                                  .element("Color", VertexElementType.FLOAT, 4) //Цвет вершины ректа
                                                  .element("Rect Position", VertexElementType.FLOAT, 2) //Позиция ректа
                                                  .element("Size", VertexElementType.FLOAT, 2) //Размер ректа
                                                  .element("Radius", VertexElementType.FLOAT, 1) //Радиус закругления вершины ректа
                                                  .build();
    И пример кода вершинного шейдера для данного формата:
    example.vsh:
    Expand Collapse Copy
    #version 330 core
     
     in vec4 position;
     in vec4 _vertexColor;
     in vec2 _rectPosition;
     in vec2 _size;
     in float _radius;
     
     #include<matrixUniforms> //В CometRenderer также есть система шейдерных библиотек, которые могут внедряться в шейдерны на этапе компиляции. Пример их использования можно будет посмотреть в примере использования библиотеки, о котором будет оговорено позже.
     
     out vec4 vertexColor;
     out vec2 rectPosition;
     out vec2 size;
     out float radius;
     
     void main() {
                                          gl_Position = projMat * modelViewMat * position;
                                          vertexColor = _vertexColor;
                                          rectPosition = _rectPosition;
                                          size = _size;
                                          radius = _radius;
     }

    По умолчанию есть следующие форматы вершин, распологающиеся в классе CometVertexFormats:
    POSITION, POSITION_COLOR, POSITION_TEXTURE, POSITION_COLOR_TEXTURE, POSITION_TEXTURE_COLOR.
  • Создание кастомных режимов отрисовки вершин (DrawMode):
    По умолчанию в библиотеке есть примитивные дравмоды: LINES, LINE_STRIP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, QUADS.
    Хотя для некоторых данных дравмодов будет достаточно, однако можно спокойно создавать свои дравмоды.
    Например, создадим дравмод для 3д куба, который принимает 8 вершин, которые будут в последующем разложены на треугольники и обработаны при отрисовке:
    Cube DrawMode:
    Expand Collapse Copy
    public static final DrawMode CUBE = new DrawMode(
                                                  GL11.GL_TRIANGLES, //Режим отрисовки в OpenGL
                                                  true, //Будет ли дравмод использовать буффер индексов или нет. В нашем случае это true.
                                                  //8 — количество вершин для одного куба до триангуляции. 36 — количество вершин для одного куба после триангуляции.
                                                  new IndexBufferGenerator(8, 36, (indexConsumer, firstVertexIndex) -> {
                                                      //1-я сторона куба
                                                      indexConsumer.accept(firstVertexIndex);
                                                      indexConsumer.accept(firstVertexIndex + 1);
                                                      indexConsumer.accept(firstVertexIndex + 2);
                                                      indexConsumer.accept(firstVertexIndex + 2);
                                                      indexConsumer.accept(firstVertexIndex + 3);
                                                      indexConsumer.accept(firstVertexIndex);
     
                                                      //2
                                                      indexConsumer.accept(firstVertexIndex + 4);
                                                      indexConsumer.accept(firstVertexIndex + 5);
                                                      indexConsumer.accept(firstVertexIndex + 6);
                                                      indexConsumer.accept(firstVertexIndex + 6);
                                                      indexConsumer.accept(firstVertexIndex + 7);
                                                      indexConsumer.accept(firstVertexIndex + 4);
     
                                                      //3-я сторона куба
                                                      indexConsumer.accept(firstVertexIndex);
                                                      indexConsumer.accept(firstVertexIndex + 3);
                                                      indexConsumer.accept(firstVertexIndex + 4);
                                                      indexConsumer.accept(firstVertexIndex + 4);
                                                      indexConsumer.accept(firstVertexIndex + 7);
                                                      indexConsumer.accept(firstVertexIndex);
     
                                                      //4-я сторона куба
                                                      indexConsumer.accept(firstVertexIndex + 2);
                                                      indexConsumer.accept(firstVertexIndex + 1);
                                                      indexConsumer.accept(firstVertexIndex + 6);
                                                      indexConsumer.accept(firstVertexIndex + 6);
                                                      indexConsumer.accept(firstVertexIndex + 5);
                                                      indexConsumer.accept(firstVertexIndex + 2);
     
                                                      //5-я сторона куба
                                                      indexConsumer.accept(firstVertexIndex + 3);
                                                      indexConsumer.accept(firstVertexIndex + 2);
                                                      indexConsumer.accept(firstVertexIndex + 5);
                                                      indexConsumer.accept(firstVertexIndex + 5);
                                                      indexConsumer.accept(firstVertexIndex + 4);
                                                      indexConsumer.accept(firstVertexIndex + 3);
     
                                                      //6-я сторона куба
                                                      indexConsumer.accept(firstVertexIndex + 1);
                                                      indexConsumer.accept(firstVertexIndex);
                                                      indexConsumer.accept(firstVertexIndex + 7);
                                                      indexConsumer.accept(firstVertexIndex + 7);
                                                      indexConsumer.accept(firstVertexIndex + 6);
                                                      indexConsumer.accept(firstVertexIndex + 1);
                                                  }),
                                                  //Функция, возвращающая данное количество вершин в меше после триангуляции.
                                                  vertices -> vertices / 8 * 36
                                          );
    drawBox method:
    Expand Collapse Copy
    public static void drawBox(MeshBuilder meshBuilder, Matrix4f matrix4f) {
                                              meshBuilder.vertex(matrix4f, 1, 0, 0);
                                              meshBuilder.vertex(matrix4f, 1, 0, 1);
                                              meshBuilder.vertex(matrix4f, 0, 0, 1);
                                              meshBuilder.vertex(matrix4f, 0, 0, 0);
     
                                              meshBuilder.vertex(matrix4f, 0, 1, 0);
                                              meshBuilder.vertex(matrix4f, 0, 1, 1);
                                              meshBuilder.vertex(matrix4f, 1, 1, 1);
                                              meshBuilder.vertex(matrix4f, 1, 1, 0);
                                          }

Как добавить в проект?


CometRenderer в данный момент находится в репозитории на гитхабе (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).
Вот пример добавления CometRenderer'a в ваш проект:
Gradle:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:comet-renderer:2.2"
    implementation "com.ferra13671:gl-texture-utils:1.7.4-HOTFIX-1"
    implementation "com.ferra13671:comet-renderer-shader-libraries:2.2"
    implementation "com.ferra13671:comet-renderer-minecraft:version"//выбери нужную тебе версию в https://github.com/Ferra13671/maven/tree/main/com/ferra13671/comet-renderer-minecraft
    
   //Плагины (необязательно)
   implementation "com.ferra13671:comet-renderer-better-exceptions:2.2"
   implementation "com.ferra13671:comet-renderer-post-effects:2.2"
}

Пример использования библиотеки можно найти в репо по пути minecraft/minecraft-(version)/src/example


Насчет будущего проекта


CometRenderer является на данный момент моим активным проектом. Идей пока что у меня достаточно, поэтому обновлений будет достаточно много. Из документации пока только JavaDoc у классов и методов, однако в будущем я планирую сделать сайт с подробной документацией по пользованию библиотекой.
Если у вас есть какие-либо идеи либо вы нашли баг, вы всегда можете написать об этом в репозитории CometRenderer'a, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).



Желаю всем удачи! :CoolCat:

Update 08.12.2025
Добавил документацию по CometRenderer на мой сайт:
Пожалуйста, авторизуйтесь для просмотра ссылки.


Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
Update 20.12.2025
Обновил CometRenderer до версии 2.0

Изменения:
  • Обновлена зависимость GLTextureUtils до версии 1.7.1
  • Полное отделение рендера от майнкрафта
  • Добавлен 'minecraft' плагин (1.21.8-fabric-yarn-2.0 и 1.21.11-fabric-yarn-2.0)
Update 24.12.2025
Добавлен 'minecraft' плагин для версии майна 26.1-snapshot-1
Также ранее плагин был добавлен для версий 1.21.8 и 1.21.11 с mojang маппингами.

Update 30.12.2025
Обновил CometRenderer до версии 2.1

Изменения:
  • Добавлена sampler object система
  • Убраны SamplerUniformUploader и BufferUniformUploader классы
  • Обновлены примеры использования 'minecraft' плагина
  • Использование lombok'а в проекте
  • Добавлен параметр оффсета для субэлементов в VertexElementType
Update 10.01.2026
Обновил CometRenderer до версии 2.2

Основные Изменения:
  • Добавлен загрузчик CometLoaders.STRING
  • Добавлена возможность устанавливать null текстуры в фреймбуффер
  • Добавлен 'minecraft' плагин для версии 26.1-snapshot-2
  • Обновлена зависимость GLTextureUtils до версии 1.7.4-HOTFIX-1
  • Некоторые изменения кода
Изменения 'minecraft' плагина:
  • Изменена структура плагина
  • Добавлена настройка UI матрицы проекции (для которой устанавливается скейл, возвращаемый функцией, которую вы передаёте в инициализации) (до этого было в примере работы с плагином)
  • Добавлен стандартный пакет програм (аля шейдеров в простонародье) (до этого было в примере работы с плагином)
  • Добавлены базовые отрисовщики (BasicRect, ColoredRect, RoundedRect, BasicTexture, ColoredTexture, RoundedTexture)
  • Теперь плагин требует 'shader-libraries' плагин для работы (думаю, достойная цена за готовый набор базовых программ и отрисовщиков)
Напоминаю, что у меня есть сайт с документацией (
Пожалуйста, авторизуйтесь для просмотра ссылки.
) в которой я достаточно подробно расписал всё нужное о рендере и его плагинах, а если этого недостаточно, то для каждой версии 'minecraft' плагина есть свой пример работы с ним.
Update 14.01.2026
Обновил CometRenderer до версии 2.3

Изменения:
  • [minecraft] Добавлена возможность изменить размер аллокатора в отрисовщиках
  • [post-effects] Убран IllegalProgramPassBuilderArgumentException
  • [main] Добавлен Config.DEFAULT_MESH_ALLOCATOR_SIZE
  • [main] Добавлен Config.MAX_MESH_VERTEX_COUNT
  • [shader-libraries] Добавлено внедрение нескольких библиотек в одном #include
  • [main] Добавлен VertexElementTypeBuilder
  • [main] Добавлено больше типов элементов вершин (VertexElementType)
  • [main] Добавлен DrawModeBuilder
 
Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.

Что за CometRenderer?


Данный проект представляет из себя достаточно мощную по производительности и возможному функционалу рендер библиотеку, которая будет гораздо лучше, чем обычный рендер майнкрафта. Предназначена же она на данный момент для майнкрафта 1.21.8, 1.21.11 fabric, 26.1-snapshot-1 fabric, 26.1-snapshot-2 fabric, а так же может использоваться за пределами майна.

Возможности CometRender'a и чем же он лучше обычного майнкрафт рендера

  • Оптимизация работы с униформами:
    В майнкрафте униформы загружаются в GPU при каждой отрисовке. В CometRenderer униформы загружаются на GPU только после того, как их значение было изменено.
  • Оптимизация отрисовки:
    Отрисовка происходит без каких-либо мусорных действий. Так же библиотека поддерживает отрисовку не только своего меша, но еще и BuiltBuffer майнкрафта.
  • Более удобная загрузка данных:
    В майнкрафте загрузка кода шейдеров происходит через Identifier, что не очень удобно, когда ты хочешь загрузить шейдер с необычного места расположения.
    В CometRenderer есть реализация CometLoader, при помощи которой можно создать кастомный загрузчик данных, тем самым загружая код шейдера тем способом, которым вы захотите. По умолчанию есть следующие загрузчики, распологающиеся в классе CometLoaders:
    IN_JAR, INPUT_STREAM, URI.
  • Создание кастомных форматов вершин (VertexFormat):
    Хотя в майнкрафте есть тоже что-то похожее, однако в CometRenderer это сделано на более высоком уровне.

    В майнкрафте форматы вершин создаются при помощи элементов вершин, которые создаются и хранятся отдельно от форматов, тем более их можно создать не больше 32. В данной библиотеке элементы вершин создаются внутри формата, тем самым можно делать самые разнообразные форматы вершин. (с этой реализацией можно создать шейдер и формат вершин, что бы за 1 draw метод отрисовывать множество ректов с разным размером, цветом, закруглением, с включенным оутлайном или нет и его размером).

    Например, вот код для создание формата вершины, который я использую в своем клиенте для отрисовки закругленных ректов:
    ROUNDED_RECT VertexFormat:
    Expand Collapse Copy
    public static final VertexFormat ROUNDED_RECT = VertexFormat.builder()
                                                   .element("Color", VertexElementType.FLOAT, 4) //Цвет вершины ректа
                                                   .element("Rect Position", VertexElementType.FLOAT, 2) //Позиция ректа
                                                   .element("Size", VertexElementType.FLOAT, 2) //Размер ректа
                                                   .element("Radius", VertexElementType.FLOAT, 1) //Радиус закругления вершины ректа
                                                   .build();
    И пример кода вершинного шейдера для данного формата:
    example.vsh:
    Expand Collapse Copy
    #version 330 core
     
     in vec4 position;
     in vec4 _vertexColor;
     in vec2 _rectPosition;
     in vec2 _size;
     in float _radius;
     
     #include<matrixUniforms> //В CometRenderer также есть система шейдерных библиотек, которые могут внедряться в шейдерны на этапе компиляции. Пример их использования можно будет посмотреть в примере использования библиотеки, о котором будет оговорено позже.
     
     out vec4 vertexColor;
     out vec2 rectPosition;
     out vec2 size;
     out float radius;
     
     void main() {
                                           gl_Position = projMat * modelViewMat * position;
                                           vertexColor = _vertexColor;
                                           rectPosition = _rectPosition;
                                           size = _size;
                                           radius = _radius;
     }

    По умолчанию есть следующие форматы вершин, распологающиеся в классе CometVertexFormats:
    POSITION, POSITION_COLOR, POSITION_TEXTURE, POSITION_COLOR_TEXTURE, POSITION_TEXTURE_COLOR.
  • Создание кастомных режимов отрисовки вершин (DrawMode):
    По умолчанию в библиотеке есть примитивные дравмоды: LINES, LINE_STRIP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, QUADS.
    Хотя для некоторых данных дравмодов будет достаточно, однако можно спокойно создавать свои дравмоды.
    Например, создадим дравмод для 3д куба, который принимает 8 вершин, которые будут в последующем разложены на треугольники и обработаны при отрисовке:
    Cube DrawMode:
    Expand Collapse Copy
    public static final DrawMode CUBE = new DrawMode(
                                                   GL11.GL_TRIANGLES, //Режим отрисовки в OpenGL
                                                   true, //Будет ли дравмод использовать буффер индексов или нет. В нашем случае это true.
                                                   //8 — количество вершин для одного куба до триангуляции. 36 — количество вершин для одного куба после триангуляции.
                                                   new IndexBufferGenerator(8, 36, (indexConsumer, firstVertexIndex) -> {
                                                       //1-я сторона куба
                                                       indexConsumer.accept(firstVertexIndex);
                                                       indexConsumer.accept(firstVertexIndex + 1);
                                                       indexConsumer.accept(firstVertexIndex + 2);
                                                       indexConsumer.accept(firstVertexIndex + 2);
                                                       indexConsumer.accept(firstVertexIndex + 3);
                                                       indexConsumer.accept(firstVertexIndex);
     
                                                       //2
                                                       indexConsumer.accept(firstVertexIndex + 4);
                                                       indexConsumer.accept(firstVertexIndex + 5);
                                                       indexConsumer.accept(firstVertexIndex + 6);
                                                       indexConsumer.accept(firstVertexIndex + 6);
                                                       indexConsumer.accept(firstVertexIndex + 7);
                                                       indexConsumer.accept(firstVertexIndex + 4);
     
                                                       //3-я сторона куба
                                                       indexConsumer.accept(firstVertexIndex);
                                                       indexConsumer.accept(firstVertexIndex + 3);
                                                       indexConsumer.accept(firstVertexIndex + 4);
                                                       indexConsumer.accept(firstVertexIndex + 4);
                                                       indexConsumer.accept(firstVertexIndex + 7);
                                                       indexConsumer.accept(firstVertexIndex);
     
                                                       //4-я сторона куба
                                                       indexConsumer.accept(firstVertexIndex + 2);
                                                       indexConsumer.accept(firstVertexIndex + 1);
                                                       indexConsumer.accept(firstVertexIndex + 6);
                                                       indexConsumer.accept(firstVertexIndex + 6);
                                                       indexConsumer.accept(firstVertexIndex + 5);
                                                       indexConsumer.accept(firstVertexIndex + 2);
     
                                                       //5-я сторона куба
                                                       indexConsumer.accept(firstVertexIndex + 3);
                                                       indexConsumer.accept(firstVertexIndex + 2);
                                                       indexConsumer.accept(firstVertexIndex + 5);
                                                       indexConsumer.accept(firstVertexIndex + 5);
                                                       indexConsumer.accept(firstVertexIndex + 4);
                                                       indexConsumer.accept(firstVertexIndex + 3);
     
                                                       //6-я сторона куба
                                                       indexConsumer.accept(firstVertexIndex + 1);
                                                       indexConsumer.accept(firstVertexIndex);
                                                       indexConsumer.accept(firstVertexIndex + 7);
                                                       indexConsumer.accept(firstVertexIndex + 7);
                                                       indexConsumer.accept(firstVertexIndex + 6);
                                                       indexConsumer.accept(firstVertexIndex + 1);
                                                   }),
                                                   //Функция, возвращающая данное количество вершин в меше после триангуляции.
                                                   vertices -> vertices / 8 * 36
                                           );
    drawBox method:
    Expand Collapse Copy
    public static void drawBox(MeshBuilder meshBuilder, Matrix4f matrix4f) {
                                               meshBuilder.vertex(matrix4f, 1, 0, 0);
                                               meshBuilder.vertex(matrix4f, 1, 0, 1);
                                               meshBuilder.vertex(matrix4f, 0, 0, 1);
                                               meshBuilder.vertex(matrix4f, 0, 0, 0);
     
                                               meshBuilder.vertex(matrix4f, 0, 1, 0);
                                               meshBuilder.vertex(matrix4f, 0, 1, 1);
                                               meshBuilder.vertex(matrix4f, 1, 1, 1);
                                               meshBuilder.vertex(matrix4f, 1, 1, 0);
                                           }

Как добавить в проект?


CometRenderer в данный момент находится в репозитории на гитхабе (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).
Вот пример добавления CometRenderer'a в ваш проект:
Gradle:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:comet-renderer:2.3"
    implementation "com.ferra13671:gl-texture-utils:1.7.4-HOTFIX-1"
    implementation "com.ferra13671:comet-renderer-shader-libraries:2.3"
    implementation "com.ferra13671:comet-renderer-minecraft:version"//выбери нужную тебе версию в https://github.com/Ferra13671/maven/tree/main/com/ferra13671/comet-renderer-minecraft
    
   //Плагины (необязательно)
   implementation "com.ferra13671:comet-renderer-better-exceptions:2.3"
   implementation "com.ferra13671:comet-renderer-post-effects:2.3"
}

Пример использования библиотеки можно найти в репо по пути minecraft/minecraft-(version)/src/example


Насчет будущего проекта


CometRenderer является на данный момент моим активным проектом. Идей пока что у меня достаточно, поэтому обновлений будет достаточно много. Из документации пока только JavaDoc у классов и методов, однако в будущем я планирую сделать сайт с подробной документацией по пользованию библиотекой.
Если у вас есть какие-либо идеи либо вы нашли баг, вы всегда можете написать об этом в репозитории CometRenderer'a, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).



Желаю всем удачи! :CoolCat:

Update 08.12.2025
Добавил документацию по CometRenderer на мой сайт:
Пожалуйста, авторизуйтесь для просмотра ссылки.


Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
Update 20.12.2025
Обновил CometRenderer до версии 2.0

Изменения:
  • Обновлена зависимость GLTextureUtils до версии 1.7.1
  • Полное отделение рендера от майнкрафта
  • Добавлен 'minecraft' плагин (1.21.8-fabric-yarn-2.0 и 1.21.11-fabric-yarn-2.0)
Update 24.12.2025
Добавлен 'minecraft' плагин для версии майна 26.1-snapshot-1
Также ранее плагин был добавлен для версий 1.21.8 и 1.21.11 с mojang маппингами.

Update 30.12.2025
Обновил CometRenderer до версии 2.1

Изменения:
  • Добавлена sampler object система
  • Убраны SamplerUniformUploader и BufferUniformUploader классы
  • Обновлены примеры использования 'minecraft' плагина
  • Использование lombok'а в проекте
  • Добавлен параметр оффсета для субэлементов в VertexElementType
Update 10.01.2026
Обновил CometRenderer до версии 2.2

Основные Изменения:
  • Добавлен загрузчик CometLoaders.STRING
  • Добавлена возможность устанавливать null текстуры в фреймбуффер
  • Добавлен 'minecraft' плагин для версии 26.1-snapshot-2
  • Обновлена зависимость GLTextureUtils до версии 1.7.4-HOTFIX-1
  • Некоторые изменения кода
Изменения 'minecraft' плагина:
  • Изменена структура плагина
  • Добавлена настройка UI матрицы проекции (для которой устанавливается скейл, возвращаемый функцией, которую вы передаёте в инициализации) (до этого было в примере работы с плагином)
  • Добавлен стандартный пакет програм (аля шейдеров в простонародье) (до этого было в примере работы с плагином)
  • Добавлены базовые отрисовщики (BasicRect, ColoredRect, RoundedRect, BasicTexture, ColoredTexture, RoundedTexture)
  • Теперь плагин требует 'shader-libraries' плагин для работы (думаю, достойная цена за готовый набор базовых программ и отрисовщиков)
Напоминаю, что у меня есть сайт с документацией (
Пожалуйста, авторизуйтесь для просмотра ссылки.
) в которой я достаточно подробно расписал всё нужное о рендере и его плагинах, а если этого недостаточно, то для каждой версии 'minecraft' плагина есть свой пример работы с ним.


Update 14.01.2026
Обновил CometRenderer до версии 2.3

Изменения:
  • [minecraft] Добавлена возможность изменить размер аллокатора в отрисовщиках
  • [post-effects] Убран IllegalProgramPassBuilderArgumentException
  • [main] Добавлен Config.DEFAULT_MESH_ALLOCATOR_SIZE
  • [main] Добавлен Config.MAX_MESH_VERTEX_COUNT
  • [shader-libraries] Добавлено внедрение нескольких библиотек в одном #include
  • [main] Добавлен VertexElementTypeBuilder
  • [main] Добавлено больше типов элементов вершин (VertexElementType)
  • [main] Добавлен DrawModeBuilder
Update 18.01.2026
Обновил CometRenderer до версии 2.4

Изменения:
  • [minecraft] Убран плагин для mojang маппингов для версий 1.21.11 и 1.21.8 (из-за ненадобности)
  • [minecraft] Изменена структура примера
  • [minecraft] Портирован на 1.21.10
  • [minecraft] Портирован на 1.21.5
  • [minecraft] Портирован на 1.21.4
  • [minecraft] Портирован на 1.21.1
  • [main] Изменен тип для CometRenderer.shaderColor с Vector4f на ShaderColorStack
 
Здарова всем. Мне стало достаточно скучно в последнее время, поэтому я решил выпустить на свет мое творение, которое я делал ещё с конца лета — CometRenderer.

Что за CometRenderer?


Данный проект представляет из себя достаточно мощную по производительности и возможному функционалу рендер библиотеку, которая будет гораздо лучше, чем обычный рендер майнкрафта. Предназначена же она на данный момент для майнкрафта 1.21.1, 1.21.4, 1.21.5, 1.21.8, 1.21.10, 1.21.11, 26.1-snapshot-1, 26.1-snapshot-2, а так же может использоваться за пределами майна.

Возможности CometRender'a и чем же он лучше обычного майнкрафт рендера

  • Оптимизация работы с униформами:
    В майнкрафте униформы загружаются в GPU при каждой отрисовке. В CometRenderer униформы загружаются на GPU только после того, как их значение было изменено.
  • Оптимизация отрисовки:
    Отрисовка происходит без каких-либо мусорных действий. Так же библиотека поддерживает отрисовку не только своего меша, но еще и BuiltBuffer майнкрафта.
  • Более удобная загрузка данных:
    В майнкрафте загрузка кода шейдеров происходит через Identifier, что не очень удобно, когда ты хочешь загрузить шейдер с необычного места расположения.
    В CometRenderer есть реализация CometLoader, при помощи которой можно создать кастомный загрузчик данных, тем самым загружая код шейдера тем способом, которым вы захотите. По умолчанию есть следующие загрузчики, распологающиеся в классе CometLoaders:
    IN_JAR, INPUT_STREAM, URI.
  • Создание кастомных форматов вершин (VertexFormat):
    Хотя в майнкрафте есть тоже что-то похожее, однако в CometRenderer это сделано на более высоком уровне.

    В майнкрафте форматы вершин создаются при помощи элементов вершин, которые создаются и хранятся отдельно от форматов, тем более их можно создать не больше 32. В данной библиотеке элементы вершин создаются внутри формата, тем самым можно делать самые разнообразные форматы вершин. (с этой реализацией можно создать шейдер и формат вершин, что бы за 1 draw метод отрисовывать множество ректов с разным размером, цветом, закруглением, с включенным оутлайном или нет и его размером).

    Например, вот код для создание формата вершины, который я использую в своем клиенте для отрисовки закругленных ректов:
    ROUNDED_RECT VertexFormat:
    Expand Collapse Copy
    public static final VertexFormat ROUNDED_RECT = VertexFormat.builder()
                                                      .element("Color", VertexElementType.FLOAT, 4) //Цвет вершины ректа
                                                      .element("Rect Position", VertexElementType.FLOAT, 2) //Позиция ректа
                                                      .element("Size", VertexElementType.FLOAT, 2) //Размер ректа
                                                      .element("Radius", VertexElementType.FLOAT, 1) //Радиус закругления вершины ректа
                                                      .build();
    И пример кода вершинного шейдера для данного формата:
    example.vsh:
    Expand Collapse Copy
    #version 330 core
     
     in vec4 position;
     in vec4 _vertexColor;
     in vec2 _rectPosition;
     in vec2 _size;
     in float _radius;
     
     #include<matrixUniforms> //В CometRenderer также есть система шейдерных библиотек, которые могут внедряться в шейдерны на этапе компиляции. Пример их использования можно будет посмотреть в примере использования библиотеки, о котором будет оговорено позже.
     
     out vec4 vertexColor;
     out vec2 rectPosition;
     out vec2 size;
     out float radius;
     
     void main() {
                                              gl_Position = projMat * modelViewMat * position;
                                              vertexColor = _vertexColor;
                                              rectPosition = _rectPosition;
                                              size = _size;
                                              radius = _radius;
     }

    По умолчанию есть следующие форматы вершин, распологающиеся в классе CometVertexFormats:
    POSITION, POSITION_COLOR, POSITION_TEXTURE, POSITION_COLOR_TEXTURE, POSITION_TEXTURE_COLOR.
  • Создание кастомных режимов отрисовки вершин (DrawMode):
    По умолчанию в библиотеке есть примитивные дравмоды: LINES, LINE_STRIP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, QUADS.
    Хотя для некоторых данных дравмодов будет достаточно, однако можно спокойно создавать свои дравмоды.
    Например, создадим дравмод для 3д куба, который принимает 8 вершин, которые будут в последующем разложены на треугольники и обработаны при отрисовке:
    Cube DrawMode:
    Expand Collapse Copy
    public static final DrawMode CUBE = new DrawMode(
                                                      GL11.GL_TRIANGLES, //Режим отрисовки в OpenGL
                                                      true, //Будет ли дравмод использовать буффер индексов или нет. В нашем случае это true.
                                                      //8 — количество вершин для одного куба до триангуляции. 36 — количество вершин для одного куба после триангуляции.
                                                      new IndexBufferGenerator(8, 36, (indexConsumer, firstVertexIndex) -> {
                                                          //1-я сторона куба
                                                          indexConsumer.accept(firstVertexIndex);
                                                          indexConsumer.accept(firstVertexIndex + 1);
                                                          indexConsumer.accept(firstVertexIndex + 2);
                                                          indexConsumer.accept(firstVertexIndex + 2);
                                                          indexConsumer.accept(firstVertexIndex + 3);
                                                          indexConsumer.accept(firstVertexIndex);
     
                                                          //2
                                                          indexConsumer.accept(firstVertexIndex + 4);
                                                          indexConsumer.accept(firstVertexIndex + 5);
                                                          indexConsumer.accept(firstVertexIndex + 6);
                                                          indexConsumer.accept(firstVertexIndex + 6);
                                                          indexConsumer.accept(firstVertexIndex + 7);
                                                          indexConsumer.accept(firstVertexIndex + 4);
     
                                                          //3-я сторона куба
                                                          indexConsumer.accept(firstVertexIndex);
                                                          indexConsumer.accept(firstVertexIndex + 3);
                                                          indexConsumer.accept(firstVertexIndex + 4);
                                                          indexConsumer.accept(firstVertexIndex + 4);
                                                          indexConsumer.accept(firstVertexIndex + 7);
                                                          indexConsumer.accept(firstVertexIndex);
     
                                                          //4-я сторона куба
                                                          indexConsumer.accept(firstVertexIndex + 2);
                                                          indexConsumer.accept(firstVertexIndex + 1);
                                                          indexConsumer.accept(firstVertexIndex + 6);
                                                          indexConsumer.accept(firstVertexIndex + 6);
                                                          indexConsumer.accept(firstVertexIndex + 5);
                                                          indexConsumer.accept(firstVertexIndex + 2);
     
                                                          //5-я сторона куба
                                                          indexConsumer.accept(firstVertexIndex + 3);
                                                          indexConsumer.accept(firstVertexIndex + 2);
                                                          indexConsumer.accept(firstVertexIndex + 5);
                                                          indexConsumer.accept(firstVertexIndex + 5);
                                                          indexConsumer.accept(firstVertexIndex + 4);
                                                          indexConsumer.accept(firstVertexIndex + 3);
     
                                                          //6-я сторона куба
                                                          indexConsumer.accept(firstVertexIndex + 1);
                                                          indexConsumer.accept(firstVertexIndex);
                                                          indexConsumer.accept(firstVertexIndex + 7);
                                                          indexConsumer.accept(firstVertexIndex + 7);
                                                          indexConsumer.accept(firstVertexIndex + 6);
                                                          indexConsumer.accept(firstVertexIndex + 1);
                                                      }),
                                                      //Функция, возвращающая данное количество вершин в меше после триангуляции.
                                                      vertices -> vertices / 8 * 36
                                              );
    drawBox method:
    Expand Collapse Copy
    public static void drawBox(MeshBuilder meshBuilder, Matrix4f matrix4f) {
                                                  meshBuilder.vertex(matrix4f, 1, 0, 0);
                                                  meshBuilder.vertex(matrix4f, 1, 0, 1);
                                                  meshBuilder.vertex(matrix4f, 0, 0, 1);
                                                  meshBuilder.vertex(matrix4f, 0, 0, 0);
     
                                                  meshBuilder.vertex(matrix4f, 0, 1, 0);
                                                  meshBuilder.vertex(matrix4f, 0, 1, 1);
                                                  meshBuilder.vertex(matrix4f, 1, 1, 1);
                                                  meshBuilder.vertex(matrix4f, 1, 1, 0);
                                              }

Как добавить в проект?


CometRenderer в данный момент находится в репозитории на гитхабе (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).
Вот пример добавления CometRenderer'a в ваш проект:
Gradle:
Expand Collapse Copy
repositories {
    maven {
        name = "ferra13671-maven"
        url = "https://ferra13671.github.io/maven/"
    }
}

dependencies {
    implementation "com.ferra13671:comet-renderer:2.4"
    implementation "com.ferra13671:gl-texture-utils:1.7.4-HOTFIX-1"
    implementation "com.ferra13671:comet-renderer-shader-libraries:2.4"
    implementation "com.ferra13671:comet-renderer-minecraft:version"//выбери нужную тебе версию в https://github.com/Ferra13671/maven/tree/main/com/ferra13671/comet-renderer-minecraft
    
   //Плагины (необязательно)
   implementation "com.ferra13671:comet-renderer-better-exceptions:2.4"
   implementation "com.ferra13671:comet-renderer-post-effects:2.4"
}

Пример использования библиотеки можно найти в репо по пути minecraft/minecraft-(version)/src/example


Насчет будущего проекта


CometRenderer является на данный момент моим активным проектом. Идей пока что у меня достаточно, поэтому обновлений будет достаточно много. Из документации пока только JavaDoc у классов и методов, однако в будущем я планирую сделать сайт с подробной документацией по пользованию библиотекой.
Если у вас есть какие-либо идеи либо вы нашли баг, вы всегда можете написать об этом в репозитории CometRenderer'a, либо в моём дискорд сервере (
Пожалуйста, авторизуйтесь для просмотра ссылки.
).



Желаю всем удачи! :CoolCat:

Update 08.12.2025
Добавил документацию по CometRenderer на мой сайт:
Пожалуйста, авторизуйтесь для просмотра ссылки.


Update 18(17).12.2025
Обновил CometRenderer до версии 1.9.

Изменения:
  • UniformType.MATRIX был переименован в UniformType.MATRIX4.
  • Добавлена система теговых реестров.
  • Добавлена система расширений компилятора (плагинов).
  • Добавлена конфиг система.
  • пост-эффекты были перенесены в отдельный плагин ('post-effects').
  • Добавлен глобальный реестр, хранящий как постоянную, так и изменяемую информацию.
  • Вывод исключений с подробным описанием, списком возможных проблем и решений перенесен в плагин 'better-exceptions'.
  • Шейдерные библиотеки были перенесены в отдельный плагин ('shader-libraries').
  • Небольшой рефакторинг.
Update 20.12.2025
Обновил CometRenderer до версии 2.0

Изменения:
  • Обновлена зависимость GLTextureUtils до версии 1.7.1
  • Полное отделение рендера от майнкрафта
  • Добавлен 'minecraft' плагин (1.21.8-fabric-yarn-2.0 и 1.21.11-fabric-yarn-2.0)
Update 24.12.2025
Добавлен 'minecraft' плагин для версии майна 26.1-snapshot-1
Также ранее плагин был добавлен для версий 1.21.8 и 1.21.11 с mojang маппингами.

Update 30.12.2025
Обновил CometRenderer до версии 2.1

Изменения:
  • Добавлена sampler object система
  • Убраны SamplerUniformUploader и BufferUniformUploader классы
  • Обновлены примеры использования 'minecraft' плагина
  • Использование lombok'а в проекте
  • Добавлен параметр оффсета для субэлементов в VertexElementType
Update 10.01.2026
Обновил CometRenderer до версии 2.2

Основные Изменения:
  • Добавлен загрузчик CometLoaders.STRING
  • Добавлена возможность устанавливать null текстуры в фреймбуффер
  • Добавлен 'minecraft' плагин для версии 26.1-snapshot-2
  • Обновлена зависимость GLTextureUtils до версии 1.7.4-HOTFIX-1
  • Некоторые изменения кода
Изменения 'minecraft' плагина:
  • Изменена структура плагина
  • Добавлена настройка UI матрицы проекции (для которой устанавливается скейл, возвращаемый функцией, которую вы передаёте в инициализации) (до этого было в примере работы с плагином)
  • Добавлен стандартный пакет програм (аля шейдеров в простонародье) (до этого было в примере работы с плагином)
  • Добавлены базовые отрисовщики (BasicRect, ColoredRect, RoundedRect, BasicTexture, ColoredTexture, RoundedTexture)
  • Теперь плагин требует 'shader-libraries' плагин для работы (думаю, достойная цена за готовый набор базовых программ и отрисовщиков)
Напоминаю, что у меня есть сайт с документацией (
Пожалуйста, авторизуйтесь для просмотра ссылки.
) в которой я достаточно подробно расписал всё нужное о рендере и его плагинах, а если этого недостаточно, то для каждой версии 'minecraft' плагина есть свой пример работы с ним.


Update 14.01.2026
Обновил CometRenderer до версии 2.3

Изменения:
  • [minecraft] Добавлена возможность изменить размер аллокатора в отрисовщиках
  • [post-effects] Убран IllegalProgramPassBuilderArgumentException
  • [main] Добавлен Config.DEFAULT_MESH_ALLOCATOR_SIZE
  • [main] Добавлен Config.MAX_MESH_VERTEX_COUNT
  • [shader-libraries] Добавлено внедрение нескольких библиотек в одном #include
  • [main] Добавлен VertexElementTypeBuilder
  • [main] Добавлено больше типов элементов вершин (VertexElementType)
  • [main] Добавлен DrawModeBuilder

Update 18.01.2026
Обновил CometRenderer до версии 2.4

Изменения:
  • [minecraft] Убран плагин для mojang маппингов для версий 1.21.11 и 1.21.8 (из-за ненадобности)
  • [minecraft] Изменена структура примера
  • [minecraft] Портирован на 1.21.10
  • [minecraft] Портирован на 1.21.5
  • [minecraft] Портирован на 1.21.4
  • [minecraft] Портирован на 1.21.1
  • [main] Изменен тип для CometRenderer.shaderColor с Vector4f на ShaderColorStack
30.01.2026
Изменил оформление темы + обновил CometRenderer до версии 2.5-HOTFIX-1

Изменения:

Основные

  • Переименован пекейдж 'program' в 'glsl'
  • Перемещён 'compiler' пекейдж в 'glsl' пекейдж
  • Убран ExceptionProvider и его тег CometTags.EXCEPTION_PROVIDER и настройка Config.DONT_THROW_EXCEPTIONS
  • Добавлен ExceptionManager, позволяющий изменять действие отдельно для выкидывания и логирования исключений, а также изменять тип действия отдельно для каждого исключения
  • Переименован ShaderColorStack в ShaderColor
  • Исправлена проблема, связанная с тем, что ShaderColor не загружал цвет, сохраненный в первый элемент стека
  • Добавлен стек для цветовой макси в ShaderColor (при получении шейдерного цвета он будет умножаться на текущую цветовую маску в стеке(если таковая имеется))
  • Добавлена настройка MINIMUM_OPENGL_VERSION в Config, которая контролирует минимальную версию OpenGL, требуемую для работы CometRenderer'а
  • Изменены айди в GLVersion на схожие с именем версии
  • Добавлен процессор директив в компилятор, который обрабатывает все директивы, которые будут найдены в шейдере перед его компиляцией
  • Добавлены расширения директив (DirectiveExtension), позволяющие добавить свою логику обработки директив шейдерного контента.
  • Изменена структура расширений компилятора и их хранение в компиляторе
  • Добавлен метод 'onCreateProgramBuilder' в CompilerExtension. Данный метод вызывается при создании нового сборщика программ.
  • Добавлена небольшая оптимизация при применении вершинных форматов
  • Добавлен Std140BufferBuilder, который позволяет удобно загружать данные формата std140 в буффер для создания UBO

'minecraft' плагин
  • Добавлен пример 3д рендера (один куб с тестом глубины и один без него)

'shader-libraries' плагин
  • Больше не сущестует как плагин, т.к. был внедрен в 'better-compiler' плагин

'better-compiler' плагин
  • Создан для расширения возможностей CometRenderer компилятора
 
30.01.2026
Изменил оформление темы + обновил CometRenderer до версии 2.5-HOTFIX-1

Изменения:

Основные

  • Переименован пекейдж 'program' в 'glsl'
  • Перемещён 'compiler' пекейдж в 'glsl' пекейдж
  • Убран ExceptionProvider и его тег CometTags.EXCEPTION_PROVIDER и настройка Config.DONT_THROW_EXCEPTIONS
  • Добавлен ExceptionManager, позволяющий изменять действие отдельно для выкидывания и логирования исключений, а также изменять тип действия отдельно для каждого исключения
  • Переименован ShaderColorStack в ShaderColor
  • Исправлена проблема, связанная с тем, что ShaderColor не загружал цвет, сохраненный в первый элемент стека
  • Добавлен стек для цветовой макси в ShaderColor (при получении шейдерного цвета он будет умножаться на текущую цветовую маску в стеке(если таковая имеется))
  • Добавлена настройка MINIMUM_OPENGL_VERSION в Config, которая контролирует минимальную версию OpenGL, требуемую для работы CometRenderer'а
  • Изменены айди в GLVersion на схожие с именем версии
  • Добавлен процессор директив в компилятор, который обрабатывает все директивы, которые будут найдены в шейдере перед его компиляцией
  • Добавлены расширения директив (DirectiveExtension), позволяющие добавить свою логику обработки директив шейдерного контента.
  • Изменена структура расширений компилятора и их хранение в компиляторе
  • Добавлен метод 'onCreateProgramBuilder' в CompilerExtension. Данный метод вызывается при создании нового сборщика программ.
  • Добавлена небольшая оптимизация при применении вершинных форматов
  • Добавлен Std140BufferBuilder, который позволяет удобно загружать данные формата std140 в буффер для создания UBO

'minecraft' плагин
  • Добавлен пример 3д рендера (один куб с тестом глубины и один без него)

'shader-libraries' плагин
  • Больше не сущестует как плагин, т.к. был внедрен в 'better-compiler' плагин

'better-compiler' плагин
  • Создан для расширения возможностей CometRenderer компилятора
ты же понимаешь что всем похуй на твоей рендер?
 
Заставить иишку не писать комменты не так уже и сложно почему сразу подумал что это чатгпт
а про пост вообще угар
 
Назад
Сверху Снизу