Александр #St.PriSoneR# Шейфер, какой именно ФАК ты хочешь составить?
По истории видеокарт и их спецификациям?
Мне кажется, это весьма объёмная работа, и очень неблагодарное занятие, потому что можно что-то упустить, недовольные всегда найдутся )
Я могу примерно рассказать о видеокартах с точки зрения программиста, о том что такое версии шейдеров, что дают разные графические АПИ (OpenGL, Direct3D), и что это собственно такое вообще. О том что такое OpenGL, как он работает и почему так важно обновлять видеодрайвер.
О том как работает пайплайн и почему, собственно, все работают с видеокартой через GAPI, а не программируют на прямую.
Люди же часто вообще плавают во всех этих понятиях.
Юра Sid Vicious Соколов, графический АПИ – это интерфейс для общения с видеокартой. И OpenGL и Direct3D в этом плане выполняют одинаковые функции.
Лучше рассказать начиная с OpenGL, думаю так будет понятнее…
До OpenGL (впрочем и после) было множество графических библиотек, но OpenGL была первой, которая стала открытой и бесплатной. В 1992 Silicon Graphics решила выпустить такую библиотеку в принципе из корыстных соображений, поскольку в это время она занимала лидирующие позиции среди рабочих станций (во время проектирования для вьюпорт-рендера как раз использовался и сейчас до сих пор очень распространён OpenGL).
Главное преимущество, которое даёт использование GAPI по сравнению с прямым программированием чипа – это возможность создания GPU с самой разнообразной архитектурой, потому что реализация OpenGL-драйвера полностью ложилась на производителя этого самого GPU (хотя была и процессорная эмуляция). Программы общаются с одним и тем же интерфейсом, и при этом могут работать на настоящем зоопарке архитектур. И если мы посмотрим на историю развития GPU, то даже у одной и той же компании чипы разных поколений могли различаться радикально. За примерами далеко ходить не надо, взять хотя бы недавние примеры при переходе от G71 к G80 или от R580 к R600, архитектуры этих чипов радикально отличаются друг от друга, поэтому писать программы с учётом архитектурных особеннотей этих чипов, никто не стал бы. Вот и пишут дрова дровописатели под свои чипы, чтобы реализовать поддержку Direct3D и OpenGL, а все приложения общаются не с видеочипом (они по сути даже не знают на чём сами работают), а с GAPI.
Если речь идёт о Direct3D, то мощь программистов Microsoft позволяет упростить написание дров, но при этом, правда, получается большая прослойка между драйвером и приложением. Если говорить об OpenGL, то реализация ложится на дровописателей полностью и обычно в самых старых дровах не то что функционал не полный, а даже тот что есть – глюк на глюке сидит и глюком заправляет. Но зато нет никакой прослойки между приложением и драйвером, нагрузка на процессор меньше. Кстати, из-за того, что поддержка OpenGL на старых дровах очень ужасная, никто не делает игры с использованием OpenGL, ведь юзеры обычно не обновляют дрова вообще. Особенно ужасная поддержка OpenGL у интел, хотя это уже другая тема. С Direct3D у всех всё нормально на любом драйвере.
Собственно, сами по себе API хоть и очень абстрактны, но позволяют управлять графическим конвейером весьма полноценно и позволяют использовать все самые главные фичи GPU. Работа как OpenGL так и Direct3D сводится к одним и тем же функциям – это работа с массивами вершин, текстурами и шейдерами, то есть работа со всеми теми типами данных, с какими работает GPU. Очень часто в играх делается мультирендер, это возможно как раз благодаря тому, что API похожи.
Кстати, сравнивать OpenGL и Direct3D в каком-то смысле даже нелепо, потому что если Direct3D един для всех, то OpenGL у каждой компании по сути свой. Да, конечно они сообща добавляют новый функционал (при чём делают это с 2-4 летним опозданием), но всё равно раелизация очень разнообразна даже на разных версиях драйверов одной и той же компании ))
Например, у Intel сейчас поддержка стандарта 2001 года и еле-еле вводит OpenGL 2.0, у ATI уже довольно давно OpenGL 2.1 (причём для всех карт начиная с Radeon 9500), но более поздний функционал вводит очень медленно и я думаю, OpenGL 3.1 у них будет где-то через год, а у NVidia OpenGL 3.1 реализован уже год как. И производительность драйвера радикально отличается, например драйвер NVIdia почти в 3 раза производительнее чем таковой у ATI… При этом у ATI значительно более прогрессивный оптимизатор шейдеров. Вот и думайте сами как ID-Software в этом зоопарке сделала хай-энд двжок, который везде хорошо работает
Самое сильное различие между OpenGL и Direct3D для программистов заключается, пожалуй, в том, что в Direct3D каждая новая версия – это локальная катастрофа для конторы, потому что требует полностью переписывать весь код по работе с гафикой. В OpenGL же ф
Самое сильное различие между OpenGL и Direct3D для программистов заключается, пожалуй, в том, что в Direct3D каждая новая версия – это локальная катастрофа для конторы, потому что требует полностью переписывать весь код по работе с графикой. В OpenGL же функционал добавлялся постепенно, путём расширений, однако это привело к тому, что API стал очень громоздким и его реализация стала совсем тяжёлой для драйверописателей. В OpenGL 3.0 наконец-то ввели модель отбрасывания старого функционала, так что OpenGL 3.0 теперь как брат-близнец Direct3D 10 (правда в несколько кастрированном варианте, потому что важные фичи в ядро не вошли, например инстансинг и геометрические шейдеры, но войдут в OpenGL 3.1). Так что в ближайшем будущем графика уровня Direct3D 10 может стать кроссплатформенной (на NVidia уже сейчас).
Развитие GAPI идёт в след за развитием GPU, ведь в разработке API участвуют все ведущие корпорации производящие видеочипы. В основном, это направление нацелено на оптимизацию работы уже существующих алгоритмов, и избавление от CPU-зависимости. CPU архитектуры x86 уже практически не развиваются, в свою очередь GPU своих темпов развития не потеряли. Поэтому с каждой новой версией GAPI мы также видим уменьшение количества тяжёлых для CPU вызовов GAPI, ну и видим всё большее расширение возможностей поперекладыванию рассчётов на GPU. Ну тут примеры я приводить не буду, думаю очевидно, что когда возможности GPU расширяются, мы можем больше на него переложить.
Например совсем недавно скелетную анимацию и силуэты shadow volume можно было рассчитывать только на CPU…
Что-то написал, надеюсь, что-нибудь понятно…
Если что-то не понятно, спрашивайте…
Блин, тут оказывается предел для сообщений есть
Николай SNVampyre Сосновиков
Спасибо за столь обстоятельный рассказ. В принципе все понятно кроме пары моментов. Хотелось бы уточнить. Как я понял OpenGl потенциально экономичнее использует ресурсы чемDirect3d но под него сложнее писать дрова. То есть он как бы более низкоуровневый чем Direct3d? Не знаю как выразиться… То есть на нам сложнее писать ведь изначально нет всех функций которые заложили мелкомягкие в Direct3d?
И еще одно. Я просто не слышал что современные GPU умеют рассчитывать скелетную анимацию. Если не сложно расскажите поподробнее. Заранее спасибо)
25 января 2009 в 13:04
помогу по GeForce )) от GeForce 2 до 295
25 января 2009 в 15:01
Александр #St.PriSoneR# Шейфер, какой именно ФАК ты хочешь составить?
По истории видеокарт и их спецификациям?
Мне кажется, это весьма объёмная работа, и очень неблагодарное занятие, потому что можно что-то упустить, недовольные всегда найдутся )
25 января 2009 в 15:01
Я могу примерно рассказать о видеокартах с точки зрения программиста, о том что такое версии шейдеров, что дают разные графические АПИ (OpenGL, Direct3D), и что это собственно такое вообще. О том что такое OpenGL, как он работает и почему так важно обновлять видеодрайвер.
О том как работает пайплайн и почему, собственно, все работают с видеокартой через GAPI, а не программируют на прямую.
Люди же часто вообще плавают во всех этих понятиях.
25 января 2009 в 20:05
Николай SNVampyre Сосновиков
Мне бы было интересно почитать) Хотя отчасти с этим знаком)
25 января 2009 в 21:03
Юра Sid Vicious Соколов, про что конкретно? )
25 января 2009 в 21:03
что дают разные графические АПИ (OpenGL, Direct3D),О том что такое OpenGL, как он работает
25 января 2009 в 21:03
про остальное я полагаю знаю достаточно) хотя век живи век учись)
26 января 2009 в 0:05
Юра Sid Vicious Соколов, графический АПИ – это интерфейс для общения с видеокартой. И OpenGL и Direct3D в этом плане выполняют одинаковые функции.
Лучше рассказать начиная с OpenGL, думаю так будет понятнее…
До OpenGL (впрочем и после) было множество графических библиотек, но OpenGL была первой, которая стала открытой и бесплатной. В 1992 Silicon Graphics решила выпустить такую библиотеку в принципе из корыстных соображений, поскольку в это время она занимала лидирующие позиции среди рабочих станций (во время проектирования для вьюпорт-рендера как раз использовался и сейчас до сих пор очень распространён OpenGL).
Главное преимущество, которое даёт использование GAPI по сравнению с прямым программированием чипа – это возможность создания GPU с самой разнообразной архитектурой, потому что реализация OpenGL-драйвера полностью ложилась на производителя этого самого GPU (хотя была и процессорная эмуляция). Программы общаются с одним и тем же интерфейсом, и при этом могут работать на настоящем зоопарке архитектур. И если мы посмотрим на историю развития GPU, то даже у одной и той же компании чипы разных поколений могли различаться радикально. За примерами далеко ходить не надо, взять хотя бы недавние примеры при переходе от G71 к G80 или от R580 к R600, архитектуры этих чипов радикально отличаются друг от друга, поэтому писать программы с учётом архитектурных особеннотей этих чипов, никто не стал бы. Вот и пишут дрова дровописатели под свои чипы, чтобы реализовать поддержку Direct3D и OpenGL, а все приложения общаются не с видеочипом (они по сути даже не знают на чём сами работают), а с GAPI.
Если речь идёт о Direct3D, то мощь программистов Microsoft позволяет упростить написание дров, но при этом, правда, получается большая прослойка между драйвером и приложением. Если говорить об OpenGL, то реализация ложится на дровописателей полностью и обычно в самых старых дровах не то что функционал не полный, а даже тот что есть – глюк на глюке сидит и глюком заправляет. Но зато нет никакой прослойки между приложением и драйвером, нагрузка на процессор меньше. Кстати, из-за того, что поддержка OpenGL на старых дровах очень ужасная, никто не делает игры с использованием OpenGL, ведь юзеры обычно не обновляют дрова вообще. Особенно ужасная поддержка OpenGL у интел, хотя это уже другая тема. С Direct3D у всех всё нормально на любом драйвере.
Собственно, сами по себе API хоть и очень абстрактны, но позволяют управлять графическим конвейером весьма полноценно и позволяют использовать все самые главные фичи GPU. Работа как OpenGL так и Direct3D сводится к одним и тем же функциям – это работа с массивами вершин, текстурами и шейдерами, то есть работа со всеми теми типами данных, с какими работает GPU. Очень часто в играх делается мультирендер, это возможно как раз благодаря тому, что API похожи.
Кстати, сравнивать OpenGL и Direct3D в каком-то смысле даже нелепо, потому что если Direct3D един для всех, то OpenGL у каждой компании по сути свой. Да, конечно они сообща добавляют новый функционал (при чём делают это с 2-4 летним опозданием), но всё равно раелизация очень разнообразна даже на разных версиях драйверов одной и той же компании
))
Например, у Intel сейчас поддержка стандарта 2001 года и еле-еле вводит OpenGL 2.0, у ATI уже довольно давно OpenGL 2.1 (причём для всех карт начиная с Radeon 9500), но более поздний функционал вводит очень медленно и я думаю, OpenGL 3.1 у них будет где-то через год, а у NVidia OpenGL 3.1 реализован уже год как. И производительность драйвера радикально отличается, например драйвер NVIdia почти в 3 раза производительнее чем таковой у ATI… При этом у ATI значительно более прогрессивный оптимизатор шейдеров. Вот и думайте сами как ID-Software в этом зоопарке сделала хай-энд двжок, который везде хорошо работает
Самое сильное различие между OpenGL и Direct3D для программистов заключается, пожалуй, в том, что в Direct3D каждая новая версия – это локальная катастрофа для конторы, потому что требует полностью переписывать весь код по работе с гафикой. В OpenGL же ф
26 января 2009 в 0:05
Самое сильное различие между OpenGL и Direct3D для программистов заключается, пожалуй, в том, что в Direct3D каждая новая версия – это локальная катастрофа для конторы, потому что требует полностью переписывать весь код по работе с графикой. В OpenGL же функционал добавлялся постепенно, путём расширений, однако это привело к тому, что API стал очень громоздким и его реализация стала совсем тяжёлой для драйверописателей. В OpenGL 3.0 наконец-то ввели модель отбрасывания старого функционала, так что OpenGL 3.0 теперь как брат-близнец Direct3D 10 (правда в несколько кастрированном варианте, потому что важные фичи в ядро не вошли, например инстансинг и геометрические шейдеры, но войдут в OpenGL 3.1). Так что в ближайшем будущем графика уровня Direct3D 10 может стать кроссплатформенной (на NVidia уже сейчас).
Развитие GAPI идёт в след за развитием GPU, ведь в разработке API участвуют все ведущие корпорации производящие видеочипы. В основном, это направление нацелено на оптимизацию работы уже существующих алгоритмов, и избавление от CPU-зависимости. CPU архитектуры x86 уже практически не развиваются, в свою очередь GPU своих темпов развития не потеряли. Поэтому с каждой новой версией GAPI мы также видим уменьшение количества тяжёлых для CPU вызовов GAPI, ну и видим всё большее расширение возможностей поперекладыванию рассчётов на GPU. Ну тут примеры я приводить не буду, думаю очевидно, что когда возможности GPU расширяются, мы можем больше на него переложить.
Например совсем недавно скелетную анимацию и силуэты shadow volume можно было рассчитывать только на CPU…
Что-то написал, надеюсь, что-нибудь понятно…
Если что-то не понятно, спрашивайте…
Блин, тут оказывается предел для сообщений есть
26 января 2009 в 1:03
Николай SNVampyre Сосновиков
Спасибо за столь обстоятельный рассказ. В принципе все понятно кроме пары моментов. Хотелось бы уточнить. Как я понял OpenGl потенциально экономичнее использует ресурсы чемDirect3d но под него сложнее писать дрова. То есть он как бы более низкоуровневый чем Direct3d? Не знаю как выразиться… То есть на нам сложнее писать ведь изначально нет всех функций которые заложили мелкомягкие в Direct3d?
И еще одно. Я просто не слышал что современные GPU умеют рассчитывать скелетную анимацию. Если не сложно расскажите поподробнее. Заранее спасибо)