2011-12-29 3 views
0

У меня есть три вопроса:В чем разница между GLSL и c?

  1. реализован/3D API Qt на GLSL код?
  2. Является ли код GLSL скомпилирован и связан как обычный код c/C++, и может ли он работать на процессоре (а не на графическом процессоре)?
  3. Почему GLSL лучше при рендеринге, чем обычный c/C++?

ответ

11

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

В OpenGL rendering pipeline есть определенные этапы в рендеринге объекта, которые предназначены для реализации программой. Эти этапы называются «шейдерными этапами». Шейдер - это программа, написанная в GLSL (по крайней мере для OpenGL), которая выполняется на одном из этапов шейдера.

GLSL используется как часть процесса рендеринга. GLSL определяет как вещи оказываются, а не что получает визуализированный.

Поэтому:

Является ли Qt/3D API реализован GLSL код?

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

Код GLSL скомпилирован и связан как нормальный код c/C++ и может ли он работать на CPU (а не на графическом процессоре)?

Нет, за каждый. Шейдеры влияют на рендеринг, а рендеринг происходит на графическом процессоре. GLSL - это язык затенения для OpenGL, поэтому код GLSL выполняется на графическом процессоре.

Почему GLSL лучше при рендеринге, чем обычный c/C++?

Это не лучше или хуже; вы не может использование один для другой. Вы не можете просто выбросить случайный C-код на GPU как часть конвейера рендеринга. И вы не можете скомпилировать GLSL для процессоров.

GLSL - это то, что мы называем domain specific language. Это язык, предназначенный для облегчения конкретной цели. Он имеет языковые конструкции, которые большинство языков просто не имеют. Он знает, что такое «текстура». Он имеет концепцию значений, которые являются инвариантными для нескольких исполнений шейдера в рамках одного вызова рендеринга (униформы). Он имеет много других концепций, которые уникальны для проблемы аппаратных шейдеров и рендеринга.

Вы не только не можете бросить C или C++ на GPU, вы бы этого не хотели. Не для шейдеров.

+0

'Код GLSL скомпилирован и связан как нормальный код c/C++, и может ли он работать на CPU (не GPU)?' 'Нет, в соответствии с выше. Шейдеры влияют на рендеринг, а рендеринг происходит на графическом процессоре. GLSL - это язык затенения для OpenGL, поэтому код GLSL выполняется на GPU. Это не совсем так. Если вы используете OpenGL в [режиме эмуляции] (http://stackoverflow.com/questions/7364871/how-to-start-opengl-in-software-emulation-mode), все будет сделано на процессоре. –

+0

@SchighSchagh: В OpenGL нет режима эмуляции. Лучшее, что вы получите, это запустить MesaGL. –

+4

Что касается спецификации OpenGL, не упоминается какой-либо «режим эмуляции», но это потому, что это спецификация API; аналогично, спецификация не упоминает графические процессоры и, конечно же, не гарантирует, что «рендеринг происходит на GPU», как вы утверждаете. Тем не менее, различные драйверы (MesaGL, включенные, как вы указываете) предоставляют программную реализацию, которая работает исключительно на процессоре. В самом деле, ** Введение ** на домашней странице MesaGL явно упоминает, что Mesa может «использоваться во многих разных средах, начиная от SOFTWARE EMULATION и заканчивая аппаратным ускорением для современных графических процессоров». –

4

Является ли Qt/3D API реализованным кодом GLSL?

Не совсем. Он может использовать некоторые внутренне, но это все скрыто от пользователя. Сам API - это C++. API OpenGL находится на C, хотя он (драйверы) использует сборку внутри.

ли код GLSL компилируется и связаны как обычный C/C++ код

Нет, конечно, нет. Он скомпилирован драйвером видеокарты и запускается на GPU. Это довольно ограниченный язык, а не много, кроме шейдеров.

Почему GLSL больше подарка при окраске, чем обычный c/C++?

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

Смежные вопросы