LINUX.ORG.RU

История изменений

Исправление x4DA, (текущая версия) :

Можно ли как-то ускорить вывод графики через glBegin/glEnd или это совсем гиблый способ?

выкинь это древнее говно

Насколько я знаю, при вызове данных функций данные передаются из оперативной памяти в видеопамять по довольно медленному соединению. Также, знаю, что лучше использовать VBO для ускорения вывода графики.

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

VBO выгодно отличается тем, что может целиком распологаться в GPU local memory, то есть все для отрисовки уже содержится в gpu local mem

Возникает законный вопрос, как среди тысяч прямоугольников, передаваемых в массиве, каждому из них назначить свою текстуру? Как повернуть каждый из них (замена glRotateF), как масштабировать (замена glScaleF), как задавать стиль наложения (glBlendFunc)?

делаешь индексный буфер GL_ELEMENT_ARRAY_BUFFER, каждому индексу будет соответствовать полигон, цвет, текстурные координаты etc.

перед отрисовкой вызываешь glVertexAttribPointer.

рисуешь функцией glDrawElements.

Движок добавляет координаты и иные параметры переданного прямоугольника в массив, сортирует их по нескольким массивам. На этом этапе, опять же, встают вопросы про использование таких параметров, как, например, угол поворота.

все это легко делается шейдерными аттрибутами.

Есть ли смысл на каждом кадре полностью пересоздавать все буферы или надо менять все эти значения прямо в памяти? Мне подобный метод видится со следующей реализацией.

пересоздавать точно не имеет смысл.

лучше изменяемые параметры загнать в отдельный буфер, с нужными performance хинтами, лочить его через glMapBuffer (там еще много разных приколов с partial buffer updates), это дела синкается с gpu, вызывать отрисовку.

еще вариант - менять параметры прям в шейдерах, если они взаимонезависимы.

Исправление x4DA, :

Можно ли как-то ускорить вывод графики через glBegin/glEnd или это совсем гиблый способ?

выкинь это древнее говно

Насколько я знаю, при вызове данных функций данные передаются из оперативной памяти в видеопамять по довольно медленному соединению. Также, знаю, что лучше использовать VBO для ускорения вывода графики.

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

VBO выгодно отличается тем, что может целиком распологаться в GPU local memory

Возникает законный вопрос, как среди тысяч прямоугольников, передаваемых в массиве, каждому из них назначить свою текстуру? Как повернуть каждый из них (замена glRotateF), как масштабировать (замена glScaleF), как задавать стиль наложения (glBlendFunc)?

делаешь индексный буфер GL_ELEMENT_ARRAY_BUFFER, каждому индексу будет соответствовать полигон, цвет, текстурные координаты etc.

перед отрисовкой вызываешь glVertexAttribPointer.

рисуешь функцией glDrawElements.

Движок добавляет координаты и иные параметры переданного прямоугольника в массив, сортирует их по нескольким массивам. На этом этапе, опять же, встают вопросы про использование таких параметров, как, например, угол поворота.

все это легко делается шейдерными аттрибутами.

Есть ли смысл на каждом кадре полностью пересоздавать все буферы или надо менять все эти значения прямо в памяти? Мне подобный метод видится со следующей реализацией.

пересоздавать точно не имеет смысл.

лучше изменяемые параметры загнать в отдельный буфер, с нужными performance хинтами, лочить его через glMapBuffer (там еще много разных приколов с partial buffer updates), это дела синкается с gpu, вызывать отрисовку.

еще вариант - менять параметры прям в шейдерах, если они взаимонезависимы.

Исправление x4DA, :

Можно ли как-то ускорить вывод графики через glBegin/glEnd или это совсем гиблый способ?

выкинь это древнее говно

Насколько я знаю, при вызове данных функций данные передаются из оперативной памяти в видеопамять по довольно медленному соединению. Также, знаю, что лучше использовать VBO для ускорения вывода графики.

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

VBO выгодно отличается тем, что может целиком распологаться в GPU local memory

Возникает законный вопрос, как среди тысяч прямоугольников, передаваемых в массиве, каждому из них назначить свою текстуру? Как повернуть каждый из них (замена glRotateF), как масштабировать (замена glScaleF), как задавать стиль наложения (glBlendFunc)?

делаешь индексный буфер GL_ELEMENT_ARRAY_BUFFER, каждому индексу будет соответствовать полигон, цвет, текстурные координаты etc.

перед отрисовкой вызываешь glVertexAttribPointer.

рисуешь функцией glDrawElements.

Движок добавляет координаты и иные параметры переданного прямоугольника в массив, сортирует их по нескольким массивам. На этом этапе, опять же, встают вопросы про использование таких параметров, как, например, угол поворота.

все это легко делается шейдерными аттрибутами.

Есть ли смысл на каждом кадре полностью пересоздавать все буферы или надо менять все эти значения прямо в памяти? Мне подобный метод видится со следующей реализацией.

пересоздавать точно не имеет смысл.

лучше изменяемые параметры загнать в отдельный буфер, с нужными performance хинтами, лочить его через glMapBuffer (там еще много разных приколов с partial buffer updates), это дела синкается с gpu, вызывать отрисовку.

еще вариант - менять параметры прям в шейдерах, если они взаимонезависимы.

Исправление x4DA, :

Можно ли как-то ускорить вывод графики через glBegin/glEnd или это совсем гиблый способ?

выкинь это древнее говно

Насколько я знаю, при вызове данных функций данные передаются из оперативной памяти в видеопамять по довольно медленному соединению. Также, знаю, что лучше использовать VBO для ускорения вывода графики.

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

VBO выгодно отличается тем, что может целиком распологаться в GPU local memory

Возникает законный вопрос, как среди тысяч прямоугольников, передаваемых в массиве, каждому из них назначить свою текстуру? Как повернуть каждый из них (замена glRotateF), как масштабировать (замена glScaleF), как задавать стиль наложения (glBlendFunc)?

делаешь индексный буфер GL_ELEMENT_ARRAY_BUFFER, каждому индексу будет соответствовать полигон, цвет, текстурные координаты etc.

перед отрисовкой вызываешь glVertexAttribPointer.

рисуешь функцией glDrawElements.

Движок добавляет координаты и иные параметры переданного прямоугольника в массив, сортирует их по нескольким массивам. На этом этапе, опять же, встают вопросы про использование таких параметров, как, например, угол поворота.

все это легко делается шейдерными аттрибутами.

Есть ли смысл на каждом кадре полностью пересоздавать все буферы или надо менять все эти значения прямо в памяти? Мне подобный метод видится со следующей реализацией.

пересоздавать точно не имеет смысл.

лучше изменяемые параметры загнать в отдельный буфер, с нужными performance хинтами, лочить его через glMapBuffer (там еще много разных приколов с partial buffer updates), это дела синкается с gpu, вызывать отрисовку.

еще вариант - менять параметры прям в шейдерах, если они взаимонезависимы.

Исправление x4DA, :

Можно ли как-то ускорить вывод графики через glBegin/glEnd или это совсем гиблый способ?

выкинь это древнее говно

Насколько я знаю, при вызове данных функций данные передаются из оперативной памяти в видеопамять по довольно медленному соединению. Также, знаю, что лучше использовать VBO для ускорения вывода графики.

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

VBO выгодно отличается тем, что может целиком распологаться в GPU local memory

Возникает законный вопрос, как среди тысяч прямоугольников, передаваемых в массиве, каждому из них назначить свою текстуру? Как повернуть каждый из них (замена glRotateF), как масштабировать (замена glScaleF), как задавать стиль наложения (glBlendFunc)?

делаешь индексный буфер GL_ELEMENT_ARRAY_BUFFER, каждому индексу будет соответствовать полигон, цвет, текстурные координаты etc.

перед отрисовкой вызываешь glVertexAttribPointer.

рисуешь функцией glDrawElements.

Движок добавляет координаты и иные параметры переданного прямоугольника в массив, сортирует их по нескольким массивам. На этом этапе, опять же, встают вопросы про использование таких параметров, как, например, угол поворота.

все это легко делается шейдерными аттрибутами.

Есть ли смысл на каждом кадре полностью пересоздавать все буферы или надо менять все эти значения прямо в памяти? Мне подобный метод видится со следующей реализацией.

пересоздавать точно не имеет смысл.

лучше изменяемые параметры загнать в отдельный буфер, с нужными performance хинтами, лочить его через glMapBuffer (там еще много разных приколов с partial buffer updates), это дела синкается с gpu, вызывать отрисовку.

еще вариант - менять параметры прям в шейдерах, если они взаимонезависимы.

Исходная версия x4DA, :

Можно ли как-то ускорить вывод графики через glBegin/glEnd или это совсем гиблый способ?

выкинь это древнее говно

Насколько я знаю, при вызове данных функций данные передаются из оперативной памяти в видеопамять по довольно медленному соединению. Также, знаю, что лучше использовать VBO для ускорения вывода графики.

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

VBO выгодно отличается тем, что может целиком распологаться в GPU local memory

Возникает законный вопрос, как среди тысяч прямоугольников, передаваемых в массиве, каждому из них назначить свою текстуру? Как повернуть каждый из них (замена glRotateF), как масштабировать (замена glScaleF), как задавать стиль наложения (glBlendFunc)?

делаешь индексный буфер GL_ELEMENT_ARRAY_BUFFER, каждому индексу будет соответствовать полигон, цвет, текстурные координаты etc.

перед отрисовкой вызываешь glVertexAttribPointer.

рисуешь функцией glDrawElements.

Есть ли смысл на каждом кадре полностью пересоздавать все буферы или надо менять все эти значения прямо в памяти? Мне подобный метод видится со следующей реализацией.

пересоздавать точно не имеет смысл.

лучше изменяемые параметры загнать в отдельный буфер, с нужными performance хинтами, лочить его через glMapBuffer (там еще много разных приколов с partial buffer updates), это дела синкается с gpu, вызывать отрисовку.

еще вариант - менять параметры прям в шейдерах, если они взаимонезависимы.