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

Как можно ускорить рендер больших текстур? - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Как сделать так, чтобы ссылка (к примеру http://google.com) открывалась в стандартном браузере? http://www.cyberforum.ru/android-dev/thread685739.html
Как сделать так, чтобы ссылка (к примеру http://google.com) открывалась в стандартном браузере. Но нужен обязательно html-код, который, к примеру, можно было бы вставить на сайт (по поринципу: market://... - переход в гугл плей или mailto://... - переход в почту и т.д.), дело в том что у меня есть сайт, который я через phonegap сконвертировал в приложение, и мне нужно, чтобы ссылку на моём сайте...
Программирование Android Не работает запрос из нескольких таблиц Доброго времени суток. Такая проблема: есть БД из 3 таблиц, если делаю запрос из одной таблицы, все отлично работает, стоит сделать запрос из 2 или 3 таблиц - приложение сообщает об ошибке. Листинг функции для запросов: private void Sostav(String idview) { recept = new ArrayList<String>(); String selection="SELECT Prod.name FROM Recept,Sostav, Prod WHERE Recept.name LIKE ? AND Recept._id... http://www.cyberforum.ru/android-dev/thread685657.html
Не получается отрендрить треугольник OpenGL 2.0 Программирование Android
Здравствуйте! Пытаюсь написать свой 2D-движок (просто спортивный интерес, не нужно мне говорить, что это почти нереально и советовать AndEngine, я просто хочу разобраться как это все работает и сделать хотя бы простенький 2D-рендерщик). Вот код: package ru.contedevel.quantum; /** * * @author ConteDevel * Class QObject (abstract) */
Программирование Android Недействительные показы AdMob
Всем привет. Я встроил баннер AdMob в приложение и меня не устраивало, что объявления не меняются с момента создания AdView и отправки запроса. Я сделал, чтобы каждую минуту запрос отправлялся повторно. В результате, объявления меняются, количество показов увеличилось в разы. И тут у меня возник вопрос. А не считаются ли такие показы недействительными, и не забанит ли меня рано или поздно...
Программирование Android Проверка числа http://www.cyberforum.ru/android-dev/thread685389.html
Здравствуйте Прошу помочь мне Не совсем понял как это сделать и есть ли встроенная функция типа isNan Проблема состоит в следующем: у меня из текстового поля программы считывается по идеи число но нужна заглушка , чтобы если пользователь ввел не число то программа выдала ему в это же текстовое поле "Атата" не могли ли вы мне подсказать как это реализовать заранее спасибо
Программирование Android Диалоги, нужно уничтожать ? Намудрил с диалогами нужна помощь: @Override protected Dialog onCreateDialog(int id) { switch (id) { case 0: AlertDialog.Builder builder_0 = new AlertDialog.Builder(this); final String mSelectList_0 = { "11", "22", "33", "44"}; подробнее

Показать сообщение отдельно
ioioioi
96 / 28 / 6
Регистрация: 25.06.2010
Сообщений: 104

Как можно ускорить рендер больших текстур? - Программирование Android

01.11.2012, 13:01. Просмотров 801. Ответов 1
Метки (Все метки)

Задался вопросом:
Имеются две текстуры 1024х1024. Они подаются на вход фрагментному шейдеру, шейдер с ними что то делает (в моем случае эффект bump mapping) и выдает одну текстуру. При этом выясняется что основное время тратится на транзакции в оперативную память: 1024*1024*4 байта * 2 текстуры ~8.4 метра гоняются туда-сюда каждый кадр.
На сколько я знаю устройство видеочипа в мобильных девайсах, происходит следующее:
т. к. своей видеопамяти нет, видеочип импользует оперативную память, что довольно медленно. Каждый кадр мультипроцессор гпу берет небольшой кусочек текстуры в текстурный буфер, далее делает над ним какие то операции, затем берет следующий кусочек и т.д. По опыту знаю, что доступ в оперативную память на несколько порядков медленнее, чем сами вычисления на гпу.
Поправьте меня, если ошибаюсь.
Это позволяет мне сделать вывод, что быстродействие упирается в большое количество данных. То есть основное время гпу отдыхает. Напрашивается решение: уменьшить глубину цвета текстуры. Например отбросить альфа канал - он мне все равно не нужен. Так же можно попробовать сжать текстуру.

А теперь собственно вопрос:
Как в андроиде уменьшить битность текстуры? В частности отбросить альфа канал. Вообще мне нужно оставить только два канала - красный и зеленый. То есть мне нужно какое то универсальное решение, когда я могу сам указать какие каналы цвета мне нужны, при этом сохраняя все пряники в виде билинейной фильтрации.

На данный момент я загружаю текстуры так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
GLES20.glGenTextures(2, texId, 0);
        GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1);
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texId[COLOR]);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.color);
        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
        bitmap.recycle();
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texId[NORMAL]);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
        GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
        bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.normal);
        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
        bitmap.recycle();
Использую в шейдере:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
precision mediump float;
                uniform sampler2D colorMap;
                uniform sampler2D normalMap;
                varying vec4 texCoord;
                uniform vec3 light;
                void main() {
                    vec3 normal = texture2D(normalMap, texCoord.st).rgb;
                    normal = 2.0*normal-1.0;
                    vec3 n = normalize(normal);
                    vec3 l = normalize(light);
                    float a = dot(n, l);
                    gl_FragColor = a*texture2D(colorMap, texCoord.st);
                }
PS В том, что производительность упирается в работу с памятью, а не в вычисления - уверен полностью. Пробовал добавлять лишние вычисления, убирать их - fps не меняется. То есть вычисления занимают ничтожно малое время.
PPS Не спрашивайте, зачем мне текстуры больше размера экрана это просто тест, так легче замерять fps.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru