Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
bpv_xquest
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 5
1

Частое переключение крэшит игру

29.12.2014, 22:12. Просмотров 274. Ответов 0
Метки нет (Все метки)

Забавы ради я пилю маленькую игрушку под Android, для графики пользуюсь Open GL ES 1. Для удобства обработки текстур у меня есть пара методов, инкапсулирующих необходимые действия Open GL. Вот они:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public void load() {
    GL10 gl = glGraphics.getGL();
    int[] textureIds = new int[1];
    gl.glGenTextures(1, textureIds, 0);
    textureId = textureIds[0];
    InputStream in = null;
    try {
        in = fileIO.readAsset(fileName);
        Bitmap bitmap = BitmapFactory.decodeStream(in);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
        bitmap.recycle();
    }
    catch(IOException e) {
        throw new RuntimeException("Couldn't load texture '" + fileName + "'", e);
    }
    finally
    {
        if(in != null)
        {
            try {
                in.close();
            }
            catch (IOException e) { }
        }
    }
}
 
public void reload() {
    load();
    setFilters(minFilter, magFilter);
    glGraphics.getGL().glBindTexture(GL10.GL_TEXTURE_2D, 0);
}
 
public void setFilters(int minFilter, int magFilter) {
    this.minFilter = minFilter;
    this.magFilter = magFilter;
}
 
public void bind() {
    GL10 gl = glGraphics.getGL();
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, minFilter);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, magFilter);
}
 
public void dispose() {
    GL10 gl = glGraphics.getGL();
    gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
    int[] textureIds = { textureId };
    gl.glDeleteTextures(1, textureIds, 0);
}
Работа с текстурным атласом начинается с создания экземпляра класса, содержащего эти методы, и вызова load(). Перед отрисовкой спрайтов с текстурами вызывается bind(). Когда есть вероятность потери контекста, я вызываю reload(). Метод dispose() хоронит атлас.

В игре постоянно используются 2 атласа 1136 x 640. Один из них загружается 1 раз и навсегда. А вот другой иногда подменяется аналогичным, но выполненным в других цветах. Происходит это при рестарте уровня, выбор новой раскраски делается рандомно.

Проблема заключается в том, что если юзер часто делает рестарт уровня (насколько часто возможно делать комбо вызов меню + кнопка рестарта + ОК), то раз через 5 уровень начинает грузиться заметно медленнее и медленнее, а потом игра крэшится. Метод dispose() срабатывает вовремя, метод finalize() для класса срабатывает вовремя. И я уже несколько дней ума не приложу в чём может быть проблема. Буду рад, если у кого-то есть дельные мысли.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2014, 22:12
Ответы с готовыми решениями:

Самое частое слово
Дан текст: в первой строке задано число строк, далее идут сами строки. Выведите...

Частое отключение интернета
Здравствуйте. Проблема - отключается интернет каждые 5-10 минут (локалка...

Самое частое число
Всем доброго времени суток. Есть массив случайных чисел, нужно найти самое...

Наиболее частое число в массиве
Задан Массив m из Чисел. Найти число,наиболее часто встречающееся в этом...

Максимально частое обновление экрана
Вечер добрый! Появилась необходимость использовать SDL2 и OpenGL под Виндой. Я...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2014, 22:12

Частое изменение частоты видеокарты
Здравствуйте, раньше все было впорядке, частота в игре не менялась, держалась...

слишком частое обновление холста
было необходимо нарисовать некоторые детали на холсте канвы с помощью ...

Частое проигрывание звука тормозит
Проигрываю звук этой функцией очень часто, но это затормаживает программу....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru