OpenGL может дать вам прямой доступ к пикселям, но иногда трудно понять, почему это не так с некоторыми функциями...
glDrawPixels, вероятно, самый простой и надежный способ — вы можете скопировать блок пикселей из «обычной» памяти в буфер кадра — это не особенно быстро, но это старо (оно задокументировано MSDN, оно такое старое), хорошо поддерживается на разных платформах (и на аппаратном уровне). ) и дает вам полный контроль и точность рендеринга пикселей — вы даже можете запрограммировать всю логику рендеринга для работы на ЦП и просто использовать его для рисования пикселей. Тем не менее, вероятно, имеет смысл попытаться использовать преимущества производительности при использовании аппаратного обеспечения...
Использование аппаратного обеспечения — это хорошо, но точность до пикселя не гарантируется даже для самых простых операций — часто драйвер делает что-то немного отличающееся от того, что вы ожидаете — GL_LINES, GL_LINE_LOOP и т. д. обычно показывают это лучше всего — это сложно используйте их с точностью до пикселя, и, насколько я знаю, нет способа обеспечить их согласованную визуализацию, если вы хотите более толстые линии - разные драйверы будут делать разные вещи. Хотя разница может быть всего в один пиксель, я знаю, что часто этого может быть достаточно, чтобы вызвать проблему.
Однако некоторые операции, скорее всего, будут идеальными для пикселя, например, сэмплирование текстуры на четырехугольнике размером с экран. Это жизненно важно для отложенного рендеринга и подобных методов, где полноэкранные буферы должны быть каким-то образом объединены — пока вы избегаете распространенных проблем с ошибками округления, вы обычно можете размещать треугольники / четырехугольники с идеальной точностью до пикселя — просто не итерируйте вокруг экрана путем накопления значений с плавающей запятой — максимально упростите его, используя преобразование, которое имеет целочисленные значения для каждого пикселя. Этого можно достичь с помощью glOrtho. На самом деле, как правило, методы рендеринга треугольников привлекают наибольшее внимание и должны быть наиболее последовательными просто потому, что самые популярные графические программы (игры) полностью зависят от них.
Если вы изо всех сил пытаетесь найти способы выполнения определенных операций, подумайте также о шейдерах — их почти всегда достаточно для всего, что вы хотите сделать (хотя может быть сложно сделать это производительным), и они дают вам дополнительный уровень контроля, который вам, вероятно, понадобится высококачественный 2D-рендерер.
person
jheriko
schedule
14.10.2010