Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Делфи и OPENGL! Как быть? Размер проги растет!

Ответить
Настройки темы
Разное - Делфи и OPENGL! Как быть? Размер проги растет!

Пользователь


Сообщения: 75
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Drongo
Дата: 14-11-2011
Описание: используйте тег [code]
Делаю окно о программе на основе 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

 

Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


а может проще сделать ту же gif-ку и не париться? Или флеш анимацию?

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 13:35, 14-11-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 75
Благодарности: 0

Профиль | Отправить PM | Цитировать


Можно было бы и проще.Но все равно я хочу узнать почему растет размер программы и что я делаю не так.И как нужно сделать?Где нужно подправить код? Ведь программа то может расти и до гигабайта и выше...

Отправлено: 13:52, 14-11-2011 | #3


Пользователь


Сообщения: 75
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я нашел в чем была моя проблема. Вот строка LoadTexture(ExtractFileDir(Application.ExeName)+'\Dll\Золото.jpg',MyTexture,False); очень сильная нагрузка шла на процессор и оперативу из за того что я постоянно подгружал переменную новыми данными. Верней в Textures.pas не предусмотрели повторного загруза инфы в переменную поэтому размер рос да и строка без грамотно повторяется кучу раз.

Отправлено: 14:10, 14-11-2011 | #4


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Greshnick, а тебе не кажется, что "о программе" не стОит того, чтобы программа росла "до гигабайта" ? странный способ изучать графику...

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 16:08, 14-11-2011 | #5


Пользователь


Сообщения: 75
Благодарности: 0

Профиль | Отправить PM | Цитировать


Программа росла из за ошибке в коде каждый раз как только наступал новый такт в таймере по новой загружалась картинка. От этого росла программа.Щас она вообще не вырастает только размер окна)))

Отправлено: 16:14, 14-11-2011 | #6


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


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

Код
Код: Выделить весь код
//----------------------  Освобождаем занимаемую память  -----------------------

procedure TFreeMemSet;
var
  MainHandle: THandle;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
    MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
    SetProcessWorkingSetSize(MainHandle, DWORD(-1), DWORD(-1));
    CloseHandle(MainHandle);
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  TFreeMemSet;
end;

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 16-11-2011 в 01:14. Причина: Пожалуйста, используйте тег [code] - #

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:21, 15-11-2011 | #7


Пользователь


Сообщения: 75
Благодарности: 0

Профиль | Отправить PM | Цитировать


opel431, Спасибо!Я так понимаю этот код можно применять даже когда закрываешь окно вызванное из DLL?

Отправлено: 10:56, 16-11-2011 | #8


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Цитата Greshnick:
Я так понимаю этот код можно применять даже когда закрываешь окно вызванное из DLL? »
Именно так!

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Отправлено: 15:11, 16-11-2011 | #9


Пользователь


Сообщения: 75
Благодарности: 0

Профиль | Отправить PM | Цитировать


opel431, Это просто супер!Ваш код творить чудеса.Размер программы составляет на диске 883кб в оперативной памяти диспетчер при запуске показывает 305 или 443кб если вырастает, то моментом освобождается супер!Спасибо Вам Огромное!

Отправлено: 12:37, 19-11-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Делфи и OPENGL! Как быть? Размер проги растет!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Изменился размер кнопки "свернуть все окна". Как вернуть прежний размер? 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




 
Переход