Android OpenGL ES 1.1 объединяет несколько текстур

#java #android #opengl-es #framebuffer #opengl-es-1.1

#java #Android #opengl-es #Фреймбуфер #opengl-es-1.1

Вопрос:

Я разрабатываю игру для Android с использованием Java, и в настоящее время я пытаюсь найти эффективный способ рендеринга необходимых текстур. Предположим, у вас есть сетка, похожая на разметку шахматной доски, и плитки для заполнения этой сетки, как в каждом квадрате на доске. Это концепция того, что будет отображаться. В настоящее время я рисую каждую плитку одну за другой. Вся загрузка текстур выполняется при создании и выполняется только один раз, а не при рисовании. Теперь о том, что я хочу сделать. Я заметил, что рисование всех по одному, хотя и быстрое для того, что я делаю, может быть затруднено. В моей игре пользователь имеет возможность перетаскивать «доску» для просмотра разных областей. На данный момент я разрешаю рисовать только необходимые плитки в зависимости от расположения верхней левой видимой плитки. Как я уже сказал, это работает довольно быстро, но, как только пользователь начинает больше взаимодействовать или перетаскивать быстрее, рендеринг начинает испытывать трудности и происходит не так быстро, как следовало бы. Это приводит к небольшому разделению между плитками. Он небольшой, достаточно большой, чтобы быть заметным. Что я хочу сделать, так это в основном разместить каждую текстуру в определенном месте, определенном сеткой, создав таким образом новую текстуру, содержащую видимую область, а затем отобразить всю эту область, а не отображать каждую плитку отдельно. Я провел много исследований и уже рассмотрел много вопросов, но я все еще не нашел чего-то, что помогло бы моему делу. Я читал, что рендеринг в текстуру с использованием фреймбуфера может помочь, но я не нашел никаких простых в использовании руководств или примеров, просто много «вот код, без объяснений» или «вот что-то похожее на то, что вы хотите, но оно использует разные вещи». Итак, если бы кто-нибудь мог указать мне на хороший учебник / пример или опубликовать ценный ответ, я был бы очень благодарен. Я избегаю OpenGL ES 2.0, потому что хочу, чтобы моя игра была совместима со многими устройствами, а для того, что я делаю, 2.0 не требуется.

Для краткого описания того, что делает мой код для дальнейшего объяснения:

 for(go through visible rows){
   for(go through visible columns){
      drawTile(); //Does the texture binding and drawing for each tile
   }
}
 

Чего я хочу:

 for(go through visible rows){
   for(go through visible columns){
      loadTileTextureIntoGridTexture();
      //I want it to combine the textures into one texture
   }
}

drawGridTexture();
 

При выполнении второго способа будет отображаться только одна целая текстура, в отличие от текстур visibleRows * visibleColumns для визуализации.

Комментарии:

1. Очевидно, это ваш выбор, но вы можете знать, что согласно данным, предоставленным Google ( developer.android.com/about/dashboards ), только 0,1% всех используемых устройств не поддерживают ES 2.0. Если вы перейдете по ссылке справочные страницы на веб — странице Khronos ( khronos.org/opengles/sdk/docs ), прямой ссылки на ES 1.1 больше нет. Контент, конечно, все еще там, если вы еще немного поработаете, но это все равно знак. По моему личному мнению, ES 1.1 является устаревшим API.

2. Спасибо за информацию! Я нигде этого не нашел, но теперь я мог бы переключиться на ES 2.0.