Одна проблема с вашим вопросом:
Вы не указали реальный код рендеринга / генерации текстуры.
Не лучше ли использовать другой подход?
Самое простое, что вы можете сделать, это убедиться, что ваши текстуры имеют размеры, равные степени двойки.Т.е. вместо 1024x768 используйте 1024x1024 и используйте только часть этой текстуры.Объяснение: хотя большинство современного оборудования поддерживает текстуры не-pow2, они иногда рассматриваются как «особый случай», и использование такой текстуры МОЖЕТ привести к падению производительности на некоторых аппаратных средствах.
Я предположил, что OpenGL может сделать миллионыиз полигонов в секунду.Я что-то упускаю здесь?
Да, вы упускаете одну важную вещь.Есть несколько вещей, которые ограничивают производительность графического процессора:
1. Скорость передачи системной памяти в видеопамять (вероятно, не в вашем случае - только для динамических текстур \ геометрии, когда данные меняются в каждом кадре).
2. Стоимость вычислений.(Если вы пишете шейдер с большими вычислениями, он будет медленным).
3. Скорость заполнения (сколько пикселей программа может выводить на экран в секунду), AFAIK зависит от скорости памяти на современных графических процессорах.
4.Скорость обработки вершин (не ваш случай) - сколько вершин GPU может обрабатывать в секунду.
5. Скорость чтения текстур (сколько текселей в секунду может считывать GPU), в современных GPU зависит от скорости памяти GPU.
6Кэширование чтения текстур (не ваш случай) - то есть в фрагментном шейдере вы можете прочитать текстуру несколько сотен раз на пиксель с небольшим падением производительности, если координаты очень близки друг к другу (то есть почти одинаковые тексели в каждом чтении) - потому что результаты кэшируются.Но производительность значительно снизится, если вы попытаетесь получить доступ к 100 случайно расположенным текселям для каждого пикселя.
Все эти характеристики зависят от аппаратного обеспечения.
То есть, в зависимости от некоторого оборудования, вы можете отрендерить 1500000 полигонов на кадр (если они занимают небольшое место на экране), но вы можете довести fps до колен с помощью 100 полигонов, если каждый полигон заполняет весь экран., использует альфа-смешивание и текстурированную с высокой степенью детализации текстуры.
Если вы подумаете об этом, вы можете заметить, что есть много видеокарт, которые могут рисовать пейзаж, но fps падает, когда выделать эффекты кадрового буфера (такие как размытие, HDR и т. д.).
Кроме того, вы можете получить снижение производительности на текстурированных поверхностях, если у вас есть встроенный графический процессор.Когда я готовил слот PCIEE на предыдущей материнской плате, мне приходилось работать со встроенным графическим процессором (NVidia 6800 или что-то еще).Результаты не были приятными.Хотя GPU поддерживает модель шейдеров 3.0 и может использовать относительно дорогие в вычислительном отношении шейдеры, частота кадров быстро падает каждый раз, когда на экране появляется текстурированный объект.Очевидно, это произошло потому, что встроенный графический процессор использовал часть системной памяти в качестве видеопамяти, а скорости передачи в «обычной» памяти графического процессора и системной памяти различаются.