|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Делфи и OPENGL! Как быть? Размер проги растет! |
|
Разное - Делфи и OPENGL! Как быть? Размер проги растет!
|
Пользователь Сообщения: 75 |
Профиль | Отправить PM | Цитировать
Делаю окно о программе на основе OPENGL в котором вращается сфера с названием программы ввиде текстуры сделанной в фотошопе. Но странное дело когда я открываю программу и смотрю в диспетчер задач, то размер в опративке растет как будто на дрожжах. Как быть где я неправильно поступаю. Вот исходный код некоторых частей:
procedure TForm1.FormCreate(Sender: TObject); begin DC:=GetDC(Panel1.Handle); PixelFormat(DC); hrc:=wglCreateContext(DC); wglMakeCurrent(DC,hrc); end; procedure TForm1.Draw; var ps : TPaintStruct; Diffuse : ARRAY[0..3] of GLFloat; pos : ARRAY[0..3] of GLFloat; begin Diffuse[0]:=0; Diffuse[1]:=0; Diffuse[2]:=1; Diffuse[3]:=1; POS[0]:=5; POS[1]:=10; POS[2]:=-10; POS[3]:=1; LoadTexture(ExtractFileDir(Application.ExeName)+'\Dll\Çîëîòî.jpg',MyTexture,False); BeginPaint(Panel1.Handle,ps); glClearColor(0,0,0,0); glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0,GL_POSITION,@POS); glPUSHMatrix; glOrtho(-10, 10, -10,10, -10, 10); glRotate(90,1,0,0); glRotate(Y,0,0,1); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, @DIFFUSE); glEnable(GL_NORMALIZE); GLEnable(GL_TEXTURE_2D); QUADObj:=GLUnewQUADRIC(); gluQuadricTexture(QUADobj,GL_TRUE); gluQUADRICdrawStyle(QUADobj,GLU_FILL); //glColor3f(0,1,0); gluSphere (quadObj, 9, 20, 20); gluDeleteQuadric(QUADObj); glDisable(GL_TEXTURE_2D); glDisable(GL_NORMALIZE); glPOPMatrix; glDisable(GL_FOG); glDisable(GL_DEPTH_TEST); glFlush(); swapBuffers(DC); EndPaint(Panel1.Handle,ps); end; procedure TForm1.PixelFormat(HDC : HDC); Var pfd : TPIXELFORMATDESCRIPTOR; nPixelFormat : Integer; begin FillChar(pfd, SizeOf(pfd), 0); nPixelFormat := ChoosePixelFormat (hdc, @pfd); SetPixelFormat (hdc, nPixelFormat, @pfd); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin wglDeleteContext(hrc); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Draw(); Y:=Y+2; end; |
|
Отправлено: 13:27, 14-11-2011 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать а может проще сделать ту же gif-ку и не париться? Или флеш анимацию?
|
------- Отправлено: 13:35, 14-11-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 75
|
Профиль | Отправить PM | Цитировать Можно было бы и проще.Но все равно я хочу узнать почему растет размер программы и что я делаю не так.И как нужно сделать?Где нужно подправить код? Ведь программа то может расти и до гигабайта и выше...
|
Отправлено: 13:52, 14-11-2011 | #3 |
Пользователь Сообщения: 75
|
Профиль | Отправить PM | Цитировать Я нашел в чем была моя проблема. Вот строка LoadTexture(ExtractFileDir(Application.ExeName)+'\Dll\Золото.jpg',MyTexture,False); очень сильная нагрузка шла на процессор и оперативу из за того что я постоянно подгружал переменную новыми данными. Верней в Textures.pas не предусмотрели повторного загруза инфы в переменную поэтому размер рос да и строка без грамотно повторяется кучу раз.
|
Отправлено: 14:10, 14-11-2011 | #4 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Greshnick, а тебе не кажется, что "о программе" не стОит того, чтобы программа росла "до гигабайта" ? странный способ изучать графику...
|
|
------- Отправлено: 16:08, 14-11-2011 | #5 |
Пользователь Сообщения: 75
|
Профиль | Отправить PM | Цитировать Программа росла из за ошибке в коде каждый раз как только наступал новый такт в таймере по новой загружалась картинка. От этого росла программа.Щас она вообще не вырастает только размер окна)))
|
Отправлено: 16:14, 14-11-2011 | #6 |
Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Можно освобождать занимаемую память по таймеру - имеется ввиду, в обычном случае, т.е. не связанные с выше названной ошибкой.
|
------- Последний раз редактировалось opel431, 16-11-2011 в 01:14. Причина: Пожалуйста, используйте тег [code] - # Отправлено: 19:21, 15-11-2011 | #7 |
Пользователь Сообщения: 75
|
Профиль | Отправить PM | Цитировать opel431, Спасибо!Я так понимаю этот код можно применять даже когда закрываешь окно вызванное из DLL?
|
Отправлено: 10:56, 16-11-2011 | #8 |
Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Цитата Greshnick:
|
|
------- Отправлено: 15:11, 16-11-2011 | #9 |
Пользователь Сообщения: 75
|
Профиль | Отправить PM | Цитировать opel431, Это просто супер!Ваш код творить чудеса.Размер программы составляет на диске 883кб в оперативной памяти диспетчер при запуске показывает 305 или 443кб если вырастает, то моментом освобождается супер!Спасибо Вам Огромное!
|
Отправлено: 12:37, 19-11-2011 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - [решено] Изменился размер кнопки "свернуть все окна". Как вернуть прежний размер? | norok | Microsoft Windows 7 | 6 | 01-11-2010 22:59 | |
Система - Не запускаются проги автоматом из Автозагрузки - как быть | Utuwa | Программное обеспечение Windows | 3 | 16-04-2010 22:35 | |
Как включить режим OpenGL на видеокартах АТІ Х2300 | akakiy_akakyan | Видеокарты | 2 | 08-07-2009 18:11 | |
Как создать базу даных без сервера бд Делфи? | naglez | Программирование и базы данных | 5 | 15-05-2006 11:30 | |
MS Office как объект OLE (Делфи) | Kroc | Программирование и базы данных | 14 | 30-10-2004 13:06 |
|