Форум программистов, компьютерный форум CyberForum.ru

Как сделать грамотное обращение к текстурам? - C++

Восстановить пароль Регистрация
 
Necronomicron
 Аватар для Necronomicron
58 / 43 / 2
Регистрация: 09.11.2012
Сообщений: 219
14.10.2013, 05:45     Как сделать грамотное обращение к текстурам? #1
Пишу на SDL 2. Есть массив блоков на весь экран, блоки 8 на 8 пикселей (рисую двойным циклом). Блоки используют разные текстуры. К примеру, последовательность текстур: 1, 2, 1, 1, 3. Если я правильно понимаю, то, к текстуре 1 программа обращается 2 раза. И насколько я понимаю, лучше сделать по одному обращению к каждой текстуре за кадр. Т.е. сперва отрисовать текстуру 1 везде, где она есть и т.д. Вопрос в том, как это лучше написать? Может где-то есть статья какая или урок? Я просто не могу даже сообразить, как запрос в гугле составить, чтобы найти ответ.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2013, 05:45     Как сделать грамотное обращение к текстурам?
Посмотрите здесь:

C++ грамотное использование кучи
C++ пытаюсь сделать реализацию через считывание из файла кол-ва чисел, i,но незнаю как сделать реализацию из файла в массив и сортировки.
C++ как сделать цикл, чтобы после моего действия, которое делает программа, она предлагала мне сделать его еще раз?
C++ Необходимо грамотное отсечение столбцов и строк двумерного массива!
Как сделать отдельные записи в таблице по строкам, чтобы сделать запросы? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
14.10.2013, 12:22     Как сделать грамотное обращение к текстурам? #2
Лучше всего такие вещи делать на шейдерах - грузите всю информацию с нужными текстурами в шейдеры (текстуры грузяться в видеопамять лишь однажды) и используете.
Впрочем, в OpenGL текстуру также требуется сначала загрузить в видеопамять и лишь потом использовать по id. Так что выйгрыш может быть несущественным.
Рисовать каким-то особенным циклом точно не стоит. Банально потому, что такое рисование потребует или каких-то особенных структур, или же много условий. Первое - не очень легко реализовать и появяться ограничения, масштабирование будет не очень. Второе не любит конвейр CPU, что убъёт и всю производительность и любые оптимизации вместе с ним.
Necronomicron
 Аватар для Necronomicron
58 / 43 / 2
Регистрация: 09.11.2012
Сообщений: 219
14.10.2013, 18:20  [ТС]     Как сделать грамотное обращение к текстурам? #3
AnyOne697,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        for (s32 y = 0, Y = 0; y < worldSize.y; y++, Y += blockSize)
            for (s32 x = 0, X = 0; x < worldSize.x; x++, X += blockSize)
                if (block[x][y].GetMaterial())
                {
                    if (block[x][y].IsSolid())
                    {
                        SDL_Rect src =
                        {
                            block[x][y].GetTileVariant() * blockSize,
                            block[x][y].GetTile() * blockSize,
                            blockSize,
                            blockSize
                        };
                        SDL_Rect dst =
                        {
                            X + (s32)posX,
                            Y + (s32)posY,
                            blockSize,
                            blockSize
                        };
                        SDL_RenderCopy(renderer, materials[block[x][y].GetMaterial()]->texture, &src, &dst);
                    }
                }
        SDL_RenderPresent(renderer);
Ну у меня есть массив текстур, разве они уже не в памяти? Или я чего-то не понимаю? А как делать на шейдерах? Может, есть какая-то статейка? Я до этого то же cамое на C#, лагало меньше, но хотя тогда экран был меньше, может поэтому. Может лагает из-за многократного вызова SDL_RenderCopy? Но хз как по-другому... Или как-то ещё можно переделать этот цикл?
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
14.10.2013, 20:41     Как сделать грамотное обращение к текстурам? #4
Цитата Сообщение от Necronomicron Посмотреть сообщение
Ну у меня есть массив текстур, разве они уже не в памяти? Или я чего-то не понимаю? А как делать на шейдерах? Может, есть какая-то статейка? Я до этого то же cамое на C#, лагало меньше, но хотя тогда экран был меньше, может поэтому. Может лагает из-за многократного вызова SDL_RenderCopy? Но хз как по-другому... Или как-то ещё можно переделать этот цикл?
Ну с SDL я работал не много. Больше в OpenGL. И обычно, кадр сначала готовиться, а потом рисуется сразу. Целиком. Ну и текстуры в OpenGL сначала надо загрузить в память и если реализация OpenGL правильная, то грузиться она будет сразу в видеопамять.

Вообще там много таких моментов. Я читал это, но в основном я самоучка. Там есть пара тем про производительность и это в общем-то стандартно. Выводить на экран - перерисовывать экран очень ресурсоёмкая задача.
Yandex
Объявления
14.10.2013, 20:41     Как сделать грамотное обращение к текстурам?
Ответ Создать тему
Опции темы

Текущее время: 14:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru