У меня есть эта проблема со старым устройством, имеющим версию для Android. Мне все еще нравится поддерживать (2.3.5), где текстура иногда работает.Android OpenGL ES 2.0 Настройка текстуры, похоже, не работает
У меня есть 5 текстур, загруженных в память с самого начала игры (не меняется и не перезагружается). Все хорошо видно в учебнике, но в игре это не так. Процесс рендеринга и загрузка объектов в точности совпадают, и они отлично работают на моем новом устройстве (Nexus 4) для всех игровых режимов и учебников.
Я загружаю 4 текстуры 1024x1024 и 1 текстуру 512x512. Текстуры, которые не работают должным образом, являются последними загруженными и связанными текстурами. Так что это может быть проблема с памятью, но как я могу это узнать? Функция ошибки OpenGL не обнаруживает ошибок во время игры, хотя текстуры отображаются неправильно.
- Оба устройства поддерживают OpenGL ES 2.0.
- Третья и четвертая текстуры работают в учебной части игры, поэтому устройство может загружать по крайней мере первые четыре текстуры, что должно указывать на то, что проблема заключается не в количестве текстур.
- Старое устройство поддерживает текстуры 1024x1024 в соответствии со спецификациями.
- Изменение всех текстур до 512x512 показывает ту же проблему, которая должна была работать, если память была проблемой, потому что вы можете удерживать 4 из этих текстур в 1 текстуре 1024x1024, которая уже отлично работает на всех устройствах. (1x512 и 1x1024 пространство памяти равно 5x512)
- Он отлично работает на Nexus 4, поэтому ошибка кодирования маловероятна.
- OpenGL не дает мне какой-либо ошибки, используя вызов функции openglerror в вызовах загрузки/настройки/рендеринга, что должно означать, что все материалы OpenGL в порядке.
- Загрузка моего текстурного пула, создание и загрузка объектов (пула), функция рендеринга (включая шейдер) во всех режимах точно одинакового кода, так что это не влияет на разницу. Я отлаживал все объекты, созданные с помощью OpenGL, чтобы увидеть, повреждены или некорректны некоторые данные, но все верно, когда я передаю его в конвейер рендеринга. Этот код передает целое число «3» в шейдер в коде рендеринга как идентификатор текстуры. Текстура, загруженная в «3», должна быть той, которая мне нужна, но где-то в OpenGL она решает использовать текстуру «1» и не выше в эти моменты, но в учебнике она помещает те же данные в OpenGL, но затем OpenGL решает использовать '3' ID текстуры, прошедшие и предназначенные ...
Код публикации является проблемой из-за сложности двигателя, который обрабатывает всю загрузку/рендеринг и т. д. графической части игры. Проводка всего кода моей игры/движка кажется немного чересчур: s, поэтому, если какая-то часть нужна для решения этой проблемы, я отправлю ее.
Я в основном из идей, чтобы попытаться решить этот вопрос :(Кто-нибудь имеет какие-либо идеи или предложения к тому, что я могу попробовать, или, может быть решение?
Это ваша проблема, вы не понимаете, как форма сэмплера работает в GLSL. Вы не пропускаете текстуру IDs, вы передаете текстуры *** unit *** ID, и они отбирают любую текстуру, привязанную к этому устройству. –
Я понимаю, как работает сэмплерная униформа, она отлично работает практически на всех устройствах (в том числе emulat или с разными версиями Android), я только забыл вставить слово «единица» в свой текст, но я думал, что это достаточно ясно. Это также не моя первая игра OpenGL ES 2.Я привязал их к текстурам GL_TEXTURE0 к GL_TEXTURE4. Дело в том, что так или иначе без ошибок игры действуют именно на этом устройстве (афайк) только и только для той части игры. – Ghotirey