Ответ 1
Мне сердечно не нравятся отрицательные ответы, но я боюсь, что я должен ответить на этот вопрос.
В конечном итоге вы запрашиваете новичок, который использует функции, уникальные для OpenGL версии 4.0 и выше. Хорошо, посмотрим на некоторые из уникальных особенностей 4.x.
Возможно, самая большая особенность - тесселяция. Что это значит? Это означает тесселлирующие примитивы, чтобы генерировать больше примитивов. Прежде чем можно даже понять, что это значит, нужно сначала понять, как примитивы получаются вообще. Это использует функции уровня до 4.x.
Но даже при четком понимании того, как работает рендеринг, проблема все еще остается. Чтобы иметь какое-либо осмысленное обсуждение тесселяционных шейдеров, сначала нужно иметь сильное понимание алгоритмов тесселяции. И это не простой вопрос. Чтобы учебник научил пользователя использовать тесселяционные шейдеры, вначале учебник должен ввести кривые сплайнов, патчи или поверхности разбиения. И те, и другие - это длинные темы, посвященные им. Только после подробного описания алгоритмов пользователь будет готов увидеть, как эти алгоритмы реализованы в тесселяционном шейдере.
Или, говоря иначе, тесселяционные шейдеры не являются новичком. Я бы даже не квалифицировал их как материал промежуточного уровня.
Еще одна важная особенность аппаратного обеспечения уровня 4.x - хранилище загрузки шейдерных изображений (и его компаньон, атомные счетчики), ядро в 4.2. Это позволяет использовать некоторые очень интересные вещи, в том числе независимую от заказа прозрачность. Однако для того, чтобы пользователь мог даже понять все причуды вокруг него, пользователь должен быть глубоко знаком с глубокими разработками современного шейдерного оборудования. Поэтому любой учебник должен сначала объяснить, как работает современное оборудование на основе VLIW/SIMD, а также как шейдеры используются с таким оборудованием. Опять же, это не тривиальный материал.
Еще одна важная особенность аппаратного обеспечения 4.x - косвенный рендеринг. То есть, включение параметров в вызов glDraw в самом объекте буфера. Проблема в том, что есть только одна причина использовать эту функциональность: поскольку GPU генерирует данные непосредственно в один или несколько буферов для последующего рендеринга. И это обычно связано с какой-то формой GPGPU-операции, которая не очень важна для новичков.
Все эти функции полезны и имеют реальную цель. Но ни один из них не должен использоваться новичками; в некоторых случаях даже программисты на промежуточном уровне не должны прикасаться к ним.
Теперь, чтобы быть полностью справедливым, есть некоторые 4.2 функции, которые не являются аппаратными (поэтому они часто реализуются в версиях с 3,3 и более) и весьма полезны. Например, отдельные объекты программы. Эти функции ударили, когда я писал мои учебные пособия на основе 3.3, и я подумал о том, чтобы вернуться к ним и включить эту функциональность. Единственная причина, по которой я этого не делал, заключается в том, что реализации (драйверы) по-прежнему не совсем стабильны в отношении этой функциональности. Но было бы полезно сделать.
Основная проблема, с которой я сталкиваюсь, заключается в следующем: если вы находитесь на этапе ваших графических знаний, где вы готовы воспользоваться уникальными функциями аппаратного обеспечения GL 4.x, то у вас также будет достаточно опыта работы с графикой, вам не нужен явный пошаговый учебный материал для реализации функций графического оборудования. Вы были бы тем человеком, который мог бы прочитать спецификацию расширения GL_ARB_tessellation_shader и понять, как заставить их делать то, что вам нужно.
Если вы заинтересованы в материале, который учит OpenGL Core 3.0 или выше, OpenGL Wiki имеет хорошую коллекцию таких ссылок. В интересах полного раскрытия я написал один из них.