OpenGL || DirectX
Однако выяснилось, что OpenGL работает с видяхой через GDI. Ну вот так доки говорят. При этом вроде считается что GDI медленный. Значит DirectX быстрее пашет чем OpenGL. Где ошибка в рассуждении?
Помогите вообщем разобратся, из док в интернете ничерта не понятно. Одни говорят опенгл рулит, другие - директх рулит
1.
http://www.nvworld.ru/docs/pr_video.html
[SIZE=3]
[ приложение использующее OpenGL "общается" с любой видеокартой практически напрямую, посредством нижнего слоя DirectX интерфейса, и работает в обход большей части Windows ]
[/SIZE]
2.
http://codenet.ru/progr/opengl/faq/gl_017.php
[SIZE=3][Можно ли в OpenGL получить прямой доступ к видеопамяти, как это делается в DirectX ? Нет, OpenGL - клиент-серверная идеология; связь между клиентом и сервером осуществляется по потенциально медленному каналу связи (как пример - скорость шин PCI и AGP намного ниже, чем внутренних трактов графического процессора, и шины 3D-чип - локальная видеопамять). Видеопамять находится на сервере, в роли которого может выступать как Ваша видеокарта, так и другой компьютер. В связи с этим функции вроде glReadPixels, glDrawPixels, glTexImage... и т.д. работают ужасно медленно, и, кроме этого, вызывают блокировку 3D-конвейера до завершения операции.][/SIZE]
Для начала:
"приложение использующее OpenGL "общается" с любой видеокартой практически напрямую, посредством нижнего слоя DirectX интерфейса, и работает в обход большей части Windows"
Это гнусный обман. Никакого DirectX-интерфейса OpenGL не использует. Он был написан задолго до выхода первой версии DirectX. Что значит: "в обход большей части Windows" ваще не понятно. DirectX работает через HAL, то-есть уровень абстракции от железа. По-этому ему абсолютно безразлична твоя видеокарта, главное что-бы были дрова. Если твое железо не может что-то сделать, то DirectX пытается это сэмулировать при помощи HEL(Hardware Emulation Level). Просто DirectX-приложения можна написать так, что им не потребуется ждать сообщений, которые поступают главному окну. А именно это и жрет "кучу" кадров.
Это тоже интересное высказывание:
"Можно ли в OpenGL получить прямой доступ к видеопамяти, как это делается в DirectX ? Нет, OpenGL - клиент-серверная идеология; связь между клиентом и сервером осуществляется по потенциально медленному каналу связи (как пример - скорость шин PCI и AGP намного ниже, чем внутренних трактов графического процессора, и шины 3D-чип - локальная видеопамять). Видеопамять находится на сервере, в роли которого может выступать как Ваша видеокарта, так и другой компьютер. В связи с этим функции вроде glReadPixels, glDrawPixels, glTexImage... и т.д. работают ужасно медленно, и, кроме этого, вызывают блокировку 3D-конвейера до завершения операции".
Клиент-серверная идеология это ваще не из этой оперы. Шоб сказать покороче, замечу, что все новые возможности видеокарт имеют свои собственные расширения OpenGL. И с их помощью можно не только загружать данные прямо в видеопамять, но и использовать шейдеры, для внесения изменений в процесс рендеринга. Видимо автор кроме стандарта 1.1 ничего не видел в своей жизни.
То-есть OpenGL и DirectX предоставляют одинаковые возможности. НО! OpenGL кроссплатформенный стандарт. А DirectX нет. Для того что-бы использовать новую фичу видяхи нужно ставить новый DirectX. А с OpenGL, эту фичу можна использовать даже имея стандарт 1.1 С другой стороны DirectX, более удобен и нагляден для програмирования за счет своей COM-архитекутры.
"Однако выяснилось, что OpenGL работает с видяхой через GDI"
Откуда такой пробел в знаниях?
GDI - к видяхе не имеет ни малейшего отношения. GDI - это интерфейс, при помощи которого осуществляется вывод на монитор. Ну, и в некоторых случаях чтения пикселей.
Читай Краснова. У него OpenGL, неплохо описан.