minecraft что такое vbo

Что такое vbo майнкрафт

Vertex Buffer Object (VBO, «объект буфера вершин») — особенность OpenGL, обеспечивающая методы выгрузки данных (вершин, вектора нормали, цветов, и так далее.) в видеоустройство для не оперативного режима рендеринга. VBO дали существенный прирост производительности над непосредственным режимом визуализации, в первую очередь, потому что данные находятся в памяти видеоустройства, а не в оперативной памяти и поэтому она может быть отрендерена непосредственно видеоустройством.

Содержание

Основные функции VBO [ править | править код ]

Следующие функции составляют основу доступа и манипуляций к VBO:

Пример на Си и OpenGL 2.1 [ править | править код ]

Пример на Си и OpenGL 3.x или OpenGL 4.x [ править | править код ]

Функция, которая может прочитать любой текстовый или двоичный файл в байтовый буфер:

Очень сильно, на повышение фпс в настройках графики, влияют четыре параметра:

Все остальные параметры прибавляют отзывчивости буквально по крохам. Настроить майнкрафт на максимальную производительность и объяснить, что означает каждый параметр, вот цель данной статьи.
Проверялось всё на версии 1.10.х

Как настроить графику в Майнкрафт

minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo
За основу взят чистый клиент Майнкрафт, без модов и текстур. Собственно такие настройки выставил у себя для комфортной игры.
Чтобы увидеть количество фпс в игре, нужно нажать F3.

Графика: Детально или Быстро
На моем ПК, изменение этого параметра, меняет фпс в районе 10-20, особенно это заметно во время дождя.
При включении Детально будут появляться частицы дождя и прозрачность листвы.
При выставлении Быстрая данные эффекты отображаться не будут.
Мягкое освещение
Использование этой настройки влияет на качество теней в Майнкрафт. По умолчанию она включена и стоит на максимуме.
Если у вас слабая видеокарта, то отключение мягкого освещения, может неплохо прибавить FPS.

3D анаглиф
Включение этой настройки может потребоваться, только когда вы захотите лицезреть игровой мир с 3D-эффектом через очки. Этот параметр понижает фпс очень и очень прилично.
minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo
Интерфейс
Тут каждому свое. На производительность не влияет. Отвечает за отображение всех иконок, интерфейса, менюшек.

Яркость
На количество фпс так же не влияет. Но влияет на комфорт игры.

Частицы
Грубо говоря, это те самые спецэффекты, которые делают игру невыносимой на слабых компьютерах. Особенно в моменты, когда идет массовое сражение и «дым столбом стоит». Это дождь, пузыри, следы, искры и прочее. Все это можно отключить выставив эту настройку в Меньше

Использовать V-Sync
Включение вертикальной синхронизации ограничит количество фпс до того же уровня, что и частота монитора. Если у монитора будет 60 Гц, то и fps будет 60. Конечно у такой настройки есть свои плюсы:

Но есть и минусы, не всем комфортно играть с таким фпс и с небольшой задержкой при нажатии на клавиши. Но наша задача набрать максимальное фпс, поэтому оставляем Выкл.

Прорисовка
Дальность прорисовки чанков. В игровом мире 1 чанк равен 16*16*256 блоков (Ш*Д*Г). Как только чанк прорисовывается и игрок попадает в него, сразу же для него грузятся все мобы, предметы и другие объекты. Данный параметр очень сильно влияет на производительность. Как настроить ее, здесь каждый должен подобрать себе значение и найти компромисс между красотой в игре и хорошим фпс.
minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo
Частота кадров
Данная настройка позволяет не грузить видеокарту по полной. Меньше нагрева, меньше шума. Попробуйте выставить это значение процентов на 30% ниже от вашего среднего фпс. Задумка кроется в том, чтобы у видюхи хватало ресурсов на обработку новых сцен и не было резких просадок и фризов. Т.к. у нее будет определенный запас по производительности. Данный совет не относится к тем у кого 5-10-15 кадров в секунду. Для вас это значение должно стоять максимум.

Покачивание камеры
Когда персонаж перемещается, камера покачивается. Это лишнее. Выкл.

Индикатор атаки
Время перезарядки сильного удара. На свое усмотрение.

Облака
Данная настройка влияет на фпс, желательно ее Отключить или выставить в положение Быстрая. Тогда они будут прорисовываться, но плоскими. У нее есть полезная функция, облака всегда движутся на запад, что позволяет по ним ориентироваться на местности.
minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo
Полноэкранный режим
Все мы привыкли играть в игры в таком режиме. Но если видюха слабенькая, то переключение на оконный режим, может повысить фпс на 20-30 значений.

Уровни детализации
Сглаживание текстур. Вся нагрузка по работе сглаживаний ложится на видеокарту. Поэтому если она бюджетная и чихать на качество картинки, отключайте данный параметр.
minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo
Тени сущностей
Появляются тени от персонажей, мобов, предметов. Влияет на производительность. Выкл.

Вот и рассмотрели все варианты как настроить Майнкрафт стандартным способом. Хотя большинство параметров и так интуитивно понятны, но именно 4 настройки, указанные в начале статьи, больше всего влияют на производительность.

VBO: Vertex Buffer Object — это расширение OpenGL (ARB_vertex_buffer_object), позволяющее работать с видеопамятью в части чтения/записи/рендеринга массивов вертексов (вершин) и индексов. Поддерживается практически на всех 3D-ускорителях (все GeForce, Radeon, Quadro, FireGL, Riva TNT, большая часть интегрированных чипсетов Intel, часть карт S3 и 3DLabs), кроме самых старых (таких, как 3dfx Voodoo).

Расширение Vertex Buffer Object позволяет, в частности, размещать геометрию в видеопамяти для последующего (многократного) рендеринга или же организовывать потоковую передачу данных видеокарте (пересылка данных + рендеринг их в каждом кадре).

VBO позволяет избежать передачи больших массивов данных через шину видеокарты в каждом кадре, так как данные хранятся локально на видеокарте. Кроме того, видеопамять на современных видеокартах обычно быстрее системной (system) памяти.

На современных видеокартах VBO обеспечивает очень большое увеличение производительности (наблюдалось, например, ускорение в 1000 раз на GeForce 6800, на статической геометрии). Использовать VBO рекомендуется практически всегда, проще назвать причины, когда не следует его использовать: это либо очень маленькие массивы данных (неэффективно), либо очень большие (когда они не помещаются в свободную видеопамять).

Документация на русском по функциям буферных объектов:

glGenBuffers, glDeleteBuffers — создание/удаление буфера
glBindBuffer — переключение текущего буфера
glBufferData — выделение видеопамяти и/или запись данных
glBufferSubData, glGetBufferSubData — чтение/запись части данных буфера
glMapBuffer, glUnmapBuffer — отображение буфера в оперативную память (аналогично функциям Lock() в DirectX)
glIsBuffer — задаёт ли данный идентикатор вершинный буфер OpenGL
glGetBufferPointerv — запрос указателя на данные уже отображённого буфера
glGetBufferParameteriv — запрос параметров буфера (размер и пр.)

Что такое VBO: Vertex Buffer Object (Объект буфера вершин)?

Источник

Minecraft Forums

VBOs & VSync?

minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo

What is VBOs & VSync? What does it do? Do I need them?

My Minecraft is very laggy (usually 20-30 fps) and chunks load very slow. Which of these are recommended for laggy computers?

minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo

minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo

I don’t know a lot about VBOs or Vsync they don’t affect my minecraft installation on or off. but i do know that you want to turn the graphics bar to fast and smooth rendering to off. another thing you can do is decreasing the render distance from 12 to a lower number (4 or 5 is good for me) you could also turn clouds off or decrease the particle amount and if worst comes to worst you can install Optifine which is kinda like a mod.

minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo

VBOs (Vertex Buffer Objects) increase framerate slightly, but can crash some older graphics cards. VSync limits your framerate to your monitor’s refresh rate so the game doesn’t waste power generating more frames than it needs, and prevents a visual glitch where the top half of the screen updates faster than the bottom half.

Both of these options should be enabled if your graphics card supports it (which it likely does, as my really old second generation Intel card does).

Источник

What is the «Use VBOs» setting?

In the 14w29b snapshot there is a new option in the «Video Settings» menu called «Use VBOs»:

minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo

The snapshot update says that enabling «Vertex Buffer Objects» should increase your FPS by 5% to 10% on average.

I am looking for a simple explanation of what VBOs do visually and how they work.

minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo

3 Answers 3

The answer provided by Flaunting is correct, but in case anyone is interested why it might be more efficient, here is an explanation.

In immediate mode (I think this is the default case in minecraft) when you want to render say a square:

minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo

You would issue the following commands each frame (in pseudo code)

For one square, this is not a lot, but there could be millions of vertices in a scene, and they may have more attributes (colour, normal etc.). This is a lot of data to send to the GPU each frame.

Using VBOS, you would load all of the vertex data into GPU memory at the start. Pseudo code might look like this:

The OpenGL code will give you back a ‘name’ for this VBO (a non-zero unsigned integer iirc). You can then reference this when you want to draw the square. So each frame, you only need to issue one draw command:

You may have to set up the drawing state so that it uses pairs of vertices for lines, but for each additional VBO, you only require one extra draw call. In fact, for static level geometry (probably not applicable in the case of minecraft) you can combine all of these vertices into one massive VBO, if you have enough GPU memory.

I’m surprised that the speed-up is only 5-10%. This is probably because of the dynamic level geometry.

Источник

Minecraft Wiki

Из-за новой политики Microsoft в отношении сторонних ресурсов, Minecraft Wiki больше не является официальной. В связи с этим были внесены некоторые изменения, в том числе и обновлён логотип вики-проекта. Подробности на нашем Discord-сервере.

Настройки

minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo

Демонстрация настроек в Java Edition 1.12.2.

Настройки в Minecraft используются для изменения условий игрового процесса и визуального восприятия. Чтобы выбрать определённый параметр, необходимо нажать кнопку Настройки в главном меню.

Дополнительные значения изменяются путём редактирования файла options.txt (Java Edition).

Содержание

Java Edition [ ]

Настройки [ ]

Список настроек с описанием параметров.

Внешний вид [ ]

НастройкаОписаниеПараметры
ПлащИзменение отображения плащей у игроков. Деактивация настройки также повлияет на элитры.Включить / Выключить
КурткаИзменение отображения куртки.Включить / Выключить
Левый рукавИзменение отображения левого рукава.Включить / Выключить
Правый рукавИзменение отображения правого рукава.Включить / Выключить
Левая штанинаИзменение отображения левой штанины.Включить / Выключить
Правая штанинаИзменение отображения правой штанины.Включить / Выключить
Головной уборИзменение отображения головного убора.Включить / Выключить
Основная рукаИзменение ведущей руки.Правая / Левая

Музыка и звуки [ ]

Настройки графики [ ]

Потрясающе! — использование экранных шейдеров для отрисовки погоды, облаков и частиц через прозрачные и полупрозрачные блоки и воду.

Детальная — использование графических эффектов высокого качества, включая облик дёрна, прозрачной листвы, воды, теней и облаков;
Быстрая — деактивация настройки для повышения FPS.

Управление [ ]

Данная вкладка предназначена для настройки управления.

Данная вкладка предназначена для изменения языка

Настройки чата [ ]

Пакеты ресурсов [ ]

Данная вкладка предназначена для выбора пакета ресурсов.

Сбор данных [ ]

НастройкаОписаниеПараметры
Отправка данныхИспользование отправки определённой информации Mojang AB для улучшения Minecraft.Включить / Выключить

Bedrock Edition [ ]

НастройкаОписание
Имя пользователяИзменение публичного имени пользователя (недоступно при входе в Minecraft Realms, можно изменить через Xbox Live).
Громкость звукаРегулирование уровня громкости звука.
СложностьИзменение уровня сложности игрового процесса (4 опции, аналогично Minecraft: Java Edition (с версии Alpha 0.12.1)).
Вид от третьего лицаИзменение использования вида от третьего лица.
Многопользовательская играИзменение разрешения пользователям присоединяться к серверу.
Широковещательный канал в LANИзменение разрешения локальным пользователям присоединяться к серверу.
Широковещательный канал в Xbox LiveПригласить друзей из Xbox Live, чтобы присоединиться к серверу.

Управление [ ]

Данная вкладка предназначена для настройки управления.

Источник

Записки программиста

Продолжаем изучение OpenGL: VBO, VAO и шейдеры

В прошлый раз мы сделали заготовку кроссплатформенного проекта на C++, в котором используется OpenGL. Мы определились с тем, как будем управлять зависимостями, какую систему сборки и IDE будем использовать. Мы даже научились рисовать окошки при помощи GLFW и перемножать матрички, используя GLM. Как оказалось, в этом нет большой науки. Сегодня же мы поговорим о самом OpenGL, так как, напомню, в предыдущем примере мы использовали устаревшие процедуры glBegin, glEnd и подобные, и в наши дни так делать не нужно.

Для начала нам потребуется подключить к проекту еще одну библиотеку, GLXW. Делается это аналогично тому, как мы это делали для GLFW и GLM — через сабмодули Git. GLXW является лоадером OpenGL. Дело в том, что доступ к функциям OpenGL осуществляется через подгрузку динамических библиотек. На разных платформах эти динамические библиотеки загружаются по-разному, да и находятся в разных местах. Собственно, лоадеры предназначены для того, чтобы скрыть эти различия от программиста. Таких лоадеров написано очень много. Например, во многих туториалах используется GLEW. Мной был выбран GLXW, так как он использовался в примерах, по которым я начинал разбираться. Также на FreeNode зависает автор GLXW (ник exDM69), а также человек (ник dav1d), который хостит статическую версию GLXW по адресу http://glxw.dav1d.de/glxw.git. GLXW на GitHub использует Python для генерации заголовочных файлов. Статическая версия от dav1d делает это по cron, и потому не требует установки Python. В общем и целом, хотя бы понятно, куда обращаться за помощью в случае чего. Наконец, с GLXW пока не было никаких проблем. Раз он просто работает, почему бы на нем и не остановиться?

if ( glxwInit ( ) ) <
std :: cerr «Failed to init GLXW» std :: endl ;
glfwDestroyWindow ( window ) ;
glfwTerminate ( ) ;
return 1 ;
>

Ранее многократно отмечалось, что glBegin, glEnd и прочие функции нынче признаны устаревшими (так называемый immediate mode). Но как же прикажете что-то без них рисовать? Чтобы ответить на этот вопрос, придется для начала понять, что такое VBO и VAO. Противоположность immediate mode, о которой далее пойдет речь, называется retained mode.

Vertex Buffer Object (VBO) — это такое средство OpenGL, позволяющее загружать определенные данные в память GPU. Например, если вы хотите сообщить GPU координаты вершин, цвета или нормали, нужно создать VBO и положить эти данные в него.

Пример загрузки координат треугольника:

Процедура glGenBuffers возвращает заданное количество неиспользуемых в настоящее время айдишников VBO. В терминологии OpenGL идентификаторы принято называть именами, поэтому далее будем стараться вместо «айдишники» говорить «имена». Заметьте, что никакого создания буферов здесь пока не происходит.

Далее процедурой glBindBuffer мы связываем (bind) полученное на предыдущем шаге имя с определенной точкой связывания (binding point). Мы хотим сохранить в буфере координаты вершин, и должны использовать для этого точку связывания GL_ARRAY_BUFFER. Обратите внимание, здесь снова ни о каком создании буферов речи пока не идет. Мне лично проще всего думать о glBindBuffer, как о команде «ок, сейчас мы будем что-то делать вот с этим VBO».

Наконец, при вызове glBufferData происходит выделение памяти и загрузка в нее наших данных. Последний аргумент процедуры называется usage и задает предполагаемый паттерн использования буфера. Часть STATIC говорит о том, что мы не собираемся модифицировать данные, а часть DRAW — о том, что данные будут использованы для отрисовки чего-то. Этот аргумент не приводит к каким-то действительным ограничениям на использование буфера. Но он является подсказкой для реализации OpenGL, и может существенно влиять на производительность приложения. Так что, лучше указывать в нем что-то правдоподобное. Заметьте, что первым аргументом указывается binding point, а не конкретный VBO. То есть, выбор самого VBO был сделан на предыдущем шаге.

Когда VBO больше не нужен, его можно удалить следующим образом:

Итак, мы сохранили данные в буфере. Зачем, спрашивается, нужны еще какие-то VAO?

Vertex Arrays Object (VAO) — это такая штука, которая говорит OpenGL, какую часть VBO следует использовать в последующих командах. Чтобы было понятнее, представьте, что VAO представляет собой массив, в элементах которого хранится информация о том, какую часть некого VBO использовать, и как эти данные нужно интерпретировать. Таким образом, один VAO по разным индексам может хранить координаты вершин, их цвета, нормали и прочие данные. Переключившись на нужный VAO мы можем эффективно обращаться к данным, на которые он «указывает», используя только индексы.

Насколько я смог разобраться, то, что лежит в VAO по каким-то индексам, правильно называется «vertex attribute array». Название часто сокращают до «vertex attributes» или просто «attributes». Соответственно, отдельный элемент массива называется атрибутом (attribute, без s на конце). При этом каждый атрибут состоит из компонетов (components). Например, координаты вершины (один атрибут) задаются тремя координатами (три компонента типа float). Чтобы нарисовать треугольник, нужно задать три вершины, поэтому нужен массив из трех атрибутов. Усложняется ситуация тем, что авторы туториалов могут использоваться свою собственную терминологию, вроде attribute list или подобную. Еще мне встречались просто опечатки, когда в тексте написано attribute, когда по контексту явно должно быть attributes. Стоит ли говорить, что такой бардак несколько усложняет изучение OpenGL? 🙂

Если написанное выше не очень понятно, попробуйте посмотреть первые пару минут этого видео. Возможно, станет яснее.

Создание и удаление VAO происходит по аналогии с VBO:

Используются VAO примерно следующим образом:

glBindVertexArray ( vao ) ;
glBindBuffer ( GL_ARRAY_BUFFER, vbo ) ;

glBindBuffer ( GL_ARRAY_BUFFER, 0 ) ; // unbind VBO
glBindVertexArray ( 0 ) ; // unbind VAO

C bind и unbind, надеюсь, все понятно.

Процедура glVertexAttribPointer говорит, откуда брать данные для массива атрибутов, а также в каком формате эти данные находятся. Номер массива атрибутов, переданный первым аргументом этой процедуре, еще понадобится нам чуть ниже, а также когда мы дойдем до работы с шейдерами. Второй аргумент задает размер компонента. В данном случае — три float’а на одну вершину. Третий аргумент задает тип компонента. Оставшиеся аргументы называются normalized, stride и pointer. Сейчас они нам не очень интересны.

Основной же цикл нашей программы будет выглядеть следующим образом:

while ( glfwWindowShouldClose ( window ) == GL_FALSE ) <
glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ;

glUseProgram ( programId ) ; // на это пока не обращайте внимания

glfwSwapBuffers ( window ) ;
glfwPollEvents ( ) ;
>

Как видите, в нем выбирается интересующий нас VAO при помощи уже знакомой нам процедуры glBindVertexArray.

Вызываемая далее процедура glEnableVertexAttribArray «включает» указанный vertex attribute array. На предыдущем шаге мы решили, что у него будет номер ноль, поэтому здесь используем тот же номер. Как можно без труда догадаться, процедура glDisableVertexAttribArray совершает обратное действие. Нужно это включение и выключение, как мне объяснили в IRC, для оптимизации. Отключая ненужные атрибуты, мы не передаем лишних данных шейдерам (о них ниже). По умолчанию все атрибуты находятся в выключенном состоянии.

Наконец, glDrawArrays отвечает за рисование примитивов. Первым аргументом передается тип примитива. В данном случае рисуется треугольник. Второй аргумент определяет, с вершины под каким номером нужно начать. Последний аргумент задает количество вершин, которое следует использовать.

Вот так замысловато происходит передача координат вершин в OpenGL! Однако остается открытым вопрос, что же делает glUseProgram?

Шейдеры

Шейдер — это программа, предназначенная для выполнения на определенном этапе rendering pipeline. Шейдеры пишутся на специальном языке GLSL (OpenGL Shading Language). Как у всех программ, у шейдеров есть какой-то вход и какой-то выход. Какие именно — зависит от типа шейдера. Существует много типов шейдеров, но в рамках данной заметки нам потребуется только два. Это vertex shader и fragment shader.

Vertex shader работает с отдельными вершинами. На вход данный шейдер получает координаты вершин и их же он должен отдавать на выход. Наш vertex shader на языке GLSL будет выглядеть так:

layout ( location = 0 ) in vec3 vertexPos ;

В части location = 0 используется тот самый номер, который мы передавали первым аргументом при вызове glVertexAttribPointer. То есть, это номер массива атрибутов, в котором мы решили хранить вершины примитива. Шейдер говорит, что входную вершину он будет брать оттуда. Соответственно, атрибуты должны быть включены вызовом glEnableVertexAttribArray. Выход же мы должны записать в переменную gl_Position. Тут есть небольшое неудобство, связанное с тем, что в программе мы использовали координаты xyz, а в шейдере на выход должны отдавать уже xyzw. Поэтому выходному w присваиваем значение 1 вручную.

Fragment shader работает с фрагментами. С ним все немного сложнее. Пока нам достаточно знать, что, помимо прочего, на выход он должен отдавать цвета пикселей. В самом простом варианте fragment shader выглядит так:

Здесь просто для любого входа возвращается один и тот же цвет.

Прежде, чем использовать шейдеры, их нужно скомпилировать. Делается это прямо в программе. Берутся исходники шейдеров в GLSL в обычных сишных строках с нулем на конце, и из них при помощи функций OpenGL получаются скомпилированные. Код этот довольно скучный, поэтому в посте мы его рассматривать не будем. Кому интересно, тот может ознакомиться с ним в качестве домашнего задания.

Поскольку шейдеры предназначены для различных этапов rendering pipeline, они также объединяются в program object. Делается это как-то так:

GLuint prepareProgram ( bool * errorFlagPtr ) <
* errorFlagPtr = false ;

GLuint programId = glCreateProgram ( ) ;
glAttachShader ( programId, vertexShaderId ) ;
glAttachShader ( programId, fragmentShaderId ) ;
glLinkProgram ( programId ) ;

* errorFlagPtr = checkProgramLinkStatus ( programId ) ;
if ( * errorFlagPtr ) return 0 ;

glDeleteShader ( vertexShaderId ) ;
glDeleteShader ( fragmentShaderId ) ;

Удалять шейдеры после их присоединения к программе совершенно легально. Затем, когда в основном цикле мы говорим:

… подцепляются соответствующие шейдеры. Vertex shader никак не меняет переданные ему координаты, а fragment shader окрашивает примитив в заданный цвет:

minecraft что такое vbo. Смотреть фото minecraft что такое vbo. Смотреть картинку minecraft что такое vbo. Картинка про minecraft что такое vbo. Фото minecraft что такое vbo

Приведенный скриншот как бы намекает нам, что код работает как под Linux, так и под Windows. Кроме того, код также был проверен на работоспособность под MacOS. Для разнообразия я решил раскрасить треугольники в разные цвета. Заметьте также, что теперь размер треугольника меняется вместе с изменением размера окна. В предыдущей заметке это было не так. В качестве упражнения можете разобраться, как это работает. Там нет ничего сложного.

В IRC мне настоятельно советовали проверять, работает ли код с GPU от NVidia. Но, к сожалению, графических карт этого производителя у меня под рукой не имеется. Думается, на таком простом коде проблем возникнуть не должно.

Как видите, все оказалось несколько запутанно, но не так, чтобы прям очень сложно. Полную версию исходного кода к этой заметке вы найдете в этом репозитории. Как обычно, буду рад любым вашим комментариям.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *