Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
11 / 11 / 3
Регистрация: 26.12.2009
Сообщений: 34
1

Не освобождается память при загрузке текстуры (C#)

01.02.2010, 22:33. Показов 2181. Ответов 2
Метки нет (Все метки)

после загрузки текстуры почему-то не освобождается память.
// с отображением текстуры вроде все нормально

для взаимодействия OpenGl и C# использовал и TAO Framework, и OpenTK.
т.е. код (TAO) выглядит следующим образом
// если интересно кому, могу код с OpenTK выложить. результат тот же
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Bitmap bitmap;
BitmapData bitmapData;
int TexId;
Rectangle Rect = new Rectangle(0, 0, 256, 256);
 
bitmap = new Bitmap("D:/asd3.jpg");                
bitmapData = bitmap.LockBits(Rect, System.Drawing.Imaging.ImageLockMode.ReadOnly,
                                        System.Drawing.Imaging.PixelFormat.Format32bppRgb);
 
Gl.glGenTextures(1, out TexId);
Gl.glBindTexture(Gl.GL_TEXTURE_2D, TexId);
Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA,  bitmapData.Width, bitmapData.Height, 0,
                    Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, bitmapData.Scan0);
                
bitmap.UnlockBits(bitmapData);                
bitmap.Dispose();
bitmap = null;
пробовал убирать строки, с Gl.glTexImage2D(....)
- память освобождается.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2010, 22:33
Ответы с готовыми решениями:

Ошибка при загрузке текстуры
Доброго времени суток! Хотел запустить свою первую текстуру в проекте C++ используя библиотеку...

Ошибка "Ссылка на неразрешенный внешний символ" при загрузке текстуры в Opengl c++
Сколько не мучился не понимаю как решить проблему с этой ошибкой. Ошибка 1 error LNK2019: ссылка...

Не освобождается память при выбросе исключений
это у меня находится в классе Add. Туда я добавляю элементы, перед этим проверяю, нет ли такого...

Не освобождается память при закрытии дочерней формы
Суть в следующем: имеется главная форма и дочерняя (ShowDialog()) . При открытии дочерней формы...

2
2471 / 1283 / 213
Регистрация: 26.02.2009
Сообщений: 5,487
Записей в блоге: 5
02.02.2010, 13:49 2
Цитата Сообщение от skif3d Посмотреть сообщение
после загрузки текстуры почему-то не освобождается память.
Забыли вызвать glDeleteTextures.
Командой glTexImage2D ОГЛ резервирует копию (по идеи, по крайней мере я так думаю) картинки. И может делать с ней всё что хочет пока не поступит вызов glDeleteTextures. Если не трудно, то можно проверить объём до вызова glTexImage2D и после. По идеи, он должен быть увеличен ровно на объём картинки. Но чувствю, может быть всё гараздо проще и быстрее, то есть не делается копия, а просто сообщается системе что память ещё используется и не освобождается привызое bitmap.Dispose. Тогда возникает вопрос что если ОГЛ захочет положить текстуру в видеопамять? Наверно тут копирует.
1
11 / 11 / 3
Регистрация: 26.12.2009
Сообщений: 34
02.02.2010, 20:11  [ТС] 3
ээ.... действительно, потерял // с OpenGl работаю недавно и сразу в большом проекте, где упор несколько на иное. но эт лирика
ежели сделать от так:
C++
1
2
3
4
5
6
7
 .............
Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA,  bitmapData.Width, bitmapData.Height, 0,
                    Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, bitmapData.Scan0);
                
Gl.glDeleteTexture(TexId);   // добавил
bitmap.UnlockBits(bitmapData);                
.................
то все нормально.
вопрос закрыт
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2010, 20:11

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Память освобождается, только если программа работает при char *c, а нужно при char c
С клавиатуры вводится символьная строка (предложение), размещается в памяти, выводится в том же...

Освобождается ли память?
Под вводимое с клавиатуры количество переменных выделяется память. Затем переменным в цикле...

Не освобождается память
Мне надо сделать прогу,точнее переделать, с использованием динамического двумерного массива... Я...

Не освобождается память от malloc
wchar_t* path; wchar_t* _path = L"\dasdasdaev\dfg"; if(!_path) return NULL; path =...


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

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

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