Где я могу научиться взаимодействовать с графической картой с помощью C ++? - PullRequest
6 голосов
/ 13 ноября 2010

Я изучаю c ++ прямо сейчас, и я хотел бы начать взаимодействовать с графической картой и играть с основами трехмерной графики. Я не нашел его ни в своей книге, ни в интернет-запросах, и на самом деле понятия не имею, с чего начать. Может ли код c ++ работать на видеокарте после ее компиляции? Я понимаю, что я получаю доступ к обработке GPU через OpenGL, но мне неясно, является ли это просто library для доступа через c ++ (и, возможно, другие языки) для передачи функций в GPU, или это специфично для GLSL , Так что же такое OpenGL и как я могу использовать его в сочетании с c ++ для передачи обработки в графический процессор? Существуют ли другие более прямые или гибкие способы работы с C ++ и видеокартой?

Ответы [ 6 ]

8 голосов
/ 13 ноября 2010

OpenGL - это библиотека. Ваш код C ++, который компилируется в машинный код (для вашего процессора, а не для GPU), вызывает функции OpenGL, которые отправляют данные на вашу видеокарту (GPU). Графическая карта интерпретирует эти данные и использует их для выполнения того, о чем вы просили. GPU не запускает любой ваш код C ++.

GLSL (OpenGL Shading Language) - это язык, используемый для указания того, что делают шейдеры GPU. Обратите внимание, что название немного неправильное, потому что код, написанный на языках шейдинга, в наши дни делает намного больше, чем шейдинг. Как правило, вы пишете свой код GLSL так же, как вы пишете код на C ++, затем используете вызовы OpenGL для компиляции кода GLSL, а затем используете больше вызовов OpenGL, чтобы инструктировать ЦП использовать шейдерные программы.


CPU

код C ++ вызовы функции OpenGL вызовы код графического драйвера , который через аппаратное оборудование передает инструкции в GPU .

GPU

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


Примечание. Вы можете заменить «Open GL functions» на «DirectX functions» и «GLSL» на другой язык затенения, и диаграмма будет такой же.

6 голосов
/ 13 ноября 2010

OpenGL и DirectX взаимодействуют с видеокартой за вас.

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

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

2 голосов
/ 13 ноября 2010

Определенное место для Opengl NeHe . Учебники здесь помогут вам начать с основ.

1 голос
/ 13 ноября 2010

Проще говоря, OpenGL - это библиотека, которая взаимодействует с драйвером вашей графической карты.Вы вызываете функции OpenGL в C ++, которые приводят к отправке команд в графический процессор для обработки.Ваш код C ++ всегда выполняется на процессоре, включая все вызовы библиотеки OpenGL, но вызовы преобразуются в команды, понятные драйверу графической карты.

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

Хорошее место для начала изучения OpenGL - OpenGL SuperBible .Последняя версия не охватывает старые конвейеры с фиксированными функциями (где вы не могли писать шейдеры) и требует несколько приличной видеокарты.

0 голосов
/ 13 ноября 2010

Вы заинтересованы в использовании графического процессора для ...

Графика : у вас есть два интерфейса, OpenGL (мультиплатформенный) и Direct3D (Windows), оба поддерживаются практически всеми драйверами графического процессора.

Расчеты : Наиболее распространенным интерфейсом банкомата является CUDA от NVidia (только для карт GeForce).Есть также OpenCL (должен поддерживаться везде, но я не уверен в текущем состоянии GeForces; все нормально в ATI) и некоторые проприетарные решения AMD / ATI, с которыми я не знаком.

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

0 голосов
/ 13 ноября 2010

Для начала я бы порекомендовал вам использовать API GLUT (GL Utility Toolkit).Посмотрите здесь ... http://www.opengl.org/resources/libraries/glut/

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

...