|
3D-программирование Вопросы, касающиеся программирования 3D мира |
26.10.2009, 22:55
|
#1
|
Знающий
Регистрация: 29.05.2007
Сообщений: 227
Написано 126 полезных сообщений (для 312 пользователей)
|
утечка памяти!?
Функции GetSurfaceBrush() и GetBrushTexture() вызывают утечку памяти. При их вжопокодивании используемая приложением память начинает расти по 4-8 кб в сек. =)
вот код для тестов (кликаем один раз - память увеличивается, второй - все ок):
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,0,2,-10
cube=CreateCube()
EntityPickMode cube,2
b=CreateBrush()
LinePick(0,10,0,0,-100,0)
s=PickedSurface()
While Not KeyDown( 1 )
If MouseHit(1)=True Then If test=0 Then test=1 Else test=0
If test=1
GetSurfaceBrush(s)
GetBrushTexture(b)
EndIf
RenderWorld
Text 10,200,"test= "+test
Flip
Wend
End
|
(Offline)
|
|
27.10.2009, 07:55
|
#2
|
Оператор ЭВМ
Регистрация: 02.11.2008
Сообщений: 27
Написано 12 полезных сообщений (для 24 пользователей)
|
Ответ: утечка памяти!?
Эти функции делают копию браша\текстуры с оригинального, ибо возвращаемый адрес каждый раз новый, ну и это подтверждает быдлокод из b3dsdk:
Brush *bbGetSurfaceBrush( Surface *s ){
Brush *br=d_new Brush( s->getBrush() );
brush_set.insert( br );
return br;
}
Texture *bbGetBrushTexture( Brush *b,int index ){
debugBrush(b);
Texture *tex=d_new Texture(b->getTexture(index));
texture_set.insert( tex );
return tex;
}
|
(Offline)
|
|
27.10.2009, 12:35
|
#3
|
Оператор ЭВМ
Регистрация: 14.06.2007
Сообщений: 20
Написано 8 полезных сообщений (для 29 пользователей)
|
Re: утечка памяти!?
Да, так оно и работало всегда. И это правильный подход, защита "от дурака", если он задумает удалить текстуру или браш, уже использующийся на какой либо 3Д модели.
|
(Offline)
|
|
27.10.2009, 13:05
|
#4
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: утечка памяти!?
Alex.D., от куда этот код ??
|
(Offline)
|
|
27.10.2009, 13:12
|
#5
|
Оператор ЭВМ
Регистрация: 02.11.2008
Сообщений: 27
Написано 12 полезных сообщений (для 24 пользователей)
|
Ответ: утечка памяти!?
И это правильный подход, защита "от дурака", если он задумает удалить текстуру или браш, уже использующийся на какой либо 3Д модели.
|
Это называется "из огня да в полымя". Два раза вызвал функцию (можт в двух разных местах или еще как) и схватил утечку памяти. А для решения такой ситуации обычно вводят счетчик ссылок, и удаляют только когда текстура\что-то еще действительно ничем не используется.
Alex.D., от куда этот код ??
|
Утекшая бета Blitz3D SDK, кажется на рл-тим.нэт есть.
|
(Offline)
|
|
27.10.2009, 13:19
|
#6
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: утечка памяти!?
в смысле "утекшая" ??
я там качал Blitz3D SDK, но у меня такого нет !!
вот посмотрел только что, там есть СДК v1.04, v1.0 и SVN Dev !!
|
(Offline)
|
|
27.10.2009, 17:32
|
#8
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: утечка памяти!?
ага, спс, разобрался !!
|
(Offline)
|
|
28.10.2009, 10:23
|
#9
|
Оператор ЭВМ
Регистрация: 14.06.2007
Сообщений: 20
Написано 8 полезных сообщений (для 29 пользователей)
|
Re: Ответ: утечка памяти!?
Сообщение от Alex.D.
А для решения такой ситуации обычно вводят счетчик ссылок, и удаляют только когда текстура\что-то еще действительно ничем не используется.
|
Этот механизм тоже присутствует. В общем все функции начинающиеся с приставки Get возвращают новый объект (копию запрашиваемого). Сложно объяснить все причины, почему так сделано, но причины стоят того. Это правило работает не только для SDK, но и для чистого Blitz3D.
|
(Offline)
|
|
09.01.2010, 21:18
|
#10
|
Знающий
Регистрация: 29.05.2007
Сообщений: 227
Написано 126 полезных сообщений (для 312 пользователей)
|
Ответ: утечка памяти!?
MixailV, не все. GetSurface возвращает указатель на сюрфейс. Alex.D., а в блиц-справке так и написано, что после использования этих функций удалите полученную копию объекта. Вот тебе и решение утечки!
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:06.
|