И возвращаясь к книге. Если вы держите ее в руках, скорее всего, вас заинтересовали идеи, которые привели к созданию языка шейдеров OpenGL: стремление к кроссплатформенности, переносимости между операционными системами, надежности и стандартизации языка шейдеров. Хотите узнать, как всего этого добиться? Начинайте читать. Затем приступайте к программированию!
Марк Олано, университет Мэриленд, округ Балтимор, MD
Сентябрь 2003 г.
Предисловие
Программируемое графическое аппаратное обеспечение существует почти столько же времени, сколько и обычное. Через несколько лет после создания графических акселераторов гибкость стала жизненной необходимостью для их конструкторов. Графические API продолжают совершенствоваться, и из-за того, что разработка нового акселератора от начала до конца может занять несколько лет, единственный способ гарантировать поддержку современного для времени выпуска нового акселератора API - внести некоторую программируемость с самого начала.
До последнего времени в области программирования графических акселераторов работали немногие, в основном исследователи и разработчики драйверов для видеокарт. Исследования в направлении программируемости графического аппаратного обеспечения велись, но целью этих исследований не было создание жизнеспособного аппаратного и программного обеспечения для разработчиков приложений и конечных пользователей. Разработчики драйверов сосредоточились на более насущных задачах - поддержке основных графических API того времени: PHIGS, РЕХ, Iris GL, OpenGL, Direct3D и др. До последнего времени ни один из этих API не позволял разработчикам задействовать возможности программируемости аппаратного обеспечения, так что разработчики приложений были вынуждены использовать только стандартные возможности традиционных графических API.
Производители графического аппаратного обеспечения также не раскрывали возможностей программируемости своих продуктов, так как это требовало дорогостоящего обучения и обязательной поддержки пользователей, поскольку интерфейсы были низкоуровневыми и зависели от конкретного устройства, а иногда кардинально менялись с разработкой нового поколения графического аппаратного обеспечения. Разработчики приложений, использовавшие такой зависимый интерфейс, были вынуждены изменять свои приложения всякий раз, как только производители выпускали новую версию аппаратного обеспечения. О поддержке аппаратного обеспечения от разных производителей не было и речи.
С наступлением XXI в. некоторые из фундаментальных принципов разработки графического аппаратного обеспечения изменились. Разработчики требовали от производителей все новых и новых возможностей, чтобы создавать все более сложные эффекты. В результате современные графические акселераторы стали более программируемыми, чем когда-либо раньше. Стандартное графическое API меняется, чтобы соответствовать новинкам аппаратного обеспечения. Для OpenGL результатом этих процессов стало огромное количество расширений к базовому API, так как производители видеокарт добавляли все новые возможности, которых требовали разработчики программ.