Прокрутка довольно проста. Чтобы нарисовать всю текстуру, вы используете текстуры от 0, 0 до 1,1. Теперь вместо этого добавьте 0.5 к каждой координате x, чтобы вы получили следующее:
0.5, 0.0----------------1.5, 0.0
| |
| |
| |
| |
| |
0.5, 1.0----------------1.5, 1.0
Теперь вы увидите, что текстура сместилась на половину ширины вправо.
Надеюсь, это поможет!
Редактировать : Если вы не можете выполнить вышеизложенное, вы можете слегка застрять, так как вы не можете читать и писать с одной и той же текстуры (хорошо, что на некоторых драйверах вы можете, но это не определено). Итак, у вас есть 2 варианта.
1) Создайте текстуру цели рендеринга и затем визуализируйте (как указано выше) исходную текстуру в новую цель рендеринга с вашим смещением. Затем текстуру с целевой текстурой рендеринга.
2) Заблокируйте (сопоставьте) текстуру и скопируйте отдельные байты вокруг в новые позиции (это будет очень медленно из-за копирования шины PCIe).
Так что в идеале вы должны поступить так, как я предлагаю в 1. Однако для лучшей производительности вы должны установить «прокручиваемый вершинный шейдер текстуры», где вы устанавливаете количество прокрутки как константу, а затем смещаете координаты текстуры для каждой вершины как первоначально описано. Это, безусловно, самый эффективный метод.