| PMG https://forum.pmg.org.ru/ |
|
| Как определить обьем занимаемой видеопамяти? https://forum.pmg.org.ru/viewtopic.php?f=2&t=273 |
Страница 1 из 1 |
| Автор: | DDMZ [ 08 фев 2006 21:35 ] |
| Заголовок сообщения: | Как определить обьем занимаемой видеопамяти? |
Читал что люди используют DirDraw.GetCaps , кто - то еще как то... Может кто поделится готовым классом? (желательно с инициализацией) Почему сам ненапишу?) я пишу под OGL и далек от DX (покачто)... |
|
| Автор: | DDMZ [ 18 мар 2006 15:41 ] |
| Заголовок сообщения: | |
Странно, форум про DirectX.... Но из ходя из количества ответов... В этот раздел заходят только новички, либо жиды. Ну что-ж пришлось копать мне самому, а как нехотелось после OGL... Но я не жмот (встречал таких), и поэтому делюсь с новичками. К томуже судя поколичеству просмотров этой темы интересует она многих. Файл: VideoMemDbg.H Код: #ifndef __VideoMemDbg_H__
#define __VideoMemDbg_H__ /* Класс для получения информации о количестве используемой и свободной видеопамяти. (помимо этого содержит и другую информацию) =/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\=/\ 1.Класс был создан для личного пользования. 2.Как-то задался я целью узнать количество свободной и занятой видеопамяти, но поспрашивав у людей пришел к выводу что половина из них незнает. Другой немного меншей половине это незачем и голову этим негрели. И маленькая горсточка нехочет делтся данной информацией. Покопав Gamdev, и несколько других сайтов нашел только упоминания "копайте в сторону DDRAW" и никакой практической информации. Я как програмист использующий OpenGL неслишком то горел желанием лезть в дебри DirecX и его DDRAW, но никуда неденешся... Пришлось брать литературу и колупаться. Вот что получилось вы видите. 3.BY DDMZ [Ивахненко Вячеслав] /Новосибирск - HTTP://DDMZ.COM.RU 4.Распространяется как есть, если у вас отформатируется винт то в этом моей вины 99% нету. =\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/=\/ Пример использования #include <VideoMemDbg.H> C_VIDEODBG VIDBG; main(){ InitProgram; InitOpenGL; VIDBG.Init(); PlayGame { ......Game.... #ifdef _DEBUG VIDBG.UpdateCaps(); //VIDBG.ddCaps.dwVidMemFree; //количество свободной //VIDBG.ddCaps.dwVidMemTotal; //количество занятой printf (интересующие вас параметры см пример[2]); #endif }; }; Пример[2]: printglString("USED: %10i FREE: %10i Total: %10i [BYTES]" ,VIDBG.ddCaps.dwVidMemTotal-VIDBG.ddCaps.dwVidMemFree, VIDBG.ddCaps.dwVidMemFree,VIDBG.ddCaps.dwVidMemTotal); --------------------------------------------------------------------------------- */ #include <d3dtypes.h> #include <ddraw.h> #pragma comment(lib, "ddraw.lib") //ВНИМАНИЕ!!! Должно инициализироватся только после инициализации OPENGL #define __C_VIDEODBG_INIT //Означает что инициализация производится через отдельную функцию class C_VIDEODBG{ private: //в ddCapsHEL содержаться т.н. capabilities of the Hardware Emulation Layer (HEL), //в ddCaps, соответственно, capabilities of the device driver (the hardware). //ddInitCaps - содержит стартовые значения чтобы сравнивать как они изменились // в процессе работы public: DDCAPS ddCaps; DDCAPS ddCapsHEL; DDCAPS ddInitCaps; //тут стартовые параметры при инициализации LPDIRECTDRAW m_pDD; //вдруг кто сам захочет чегонить получить без класса. DDCAPS* GetCaps(void); //возвращает указатель на ddCaps DDCAPS* GetCapsHEL(void); //возвращает указатель на ddCapsHEL void GetCaps(DDCAPS* ddCaps); //Передаем как в обычный GC, ну а HEL кому он нужен?) void UpdateCaps(void); //обновляем Capsы, и работаем потом с ними через класс C_VIDEODBG(); //инициализация ~C_VIDEODBG(); //завершение работы #ifdef __C_VIDEODBG_INIT void Init(void); //Инициализация после обьявления класса #endif }; //------------------------------------------------------ C_VIDEODBG::C_VIDEODBG(){ m_pDD=NULL; #ifdef __C_VIDEODBG_INIT }; void C_VIDEODBG::Init(void){ #endif //create DirectDrawCreate( NULL, &m_pDD, NULL ); ddCaps.dwSize=sizeof(ddCaps); ddInitCaps.dwSize=sizeof(ddInitCaps);; ddCapsHEL.dwSize=sizeof(ddCapsHEL); if( m_pDD )m_pDD->GetCaps(&ddInitCaps,&ddCapsHEL); }; //------------------------------------------------------- DDCAPS* C_VIDEODBG::GetCaps(void){ if( m_pDD )m_pDD->GetCaps(&ddCaps,&ddCapsHEL); return &ddCaps; }; //------------------------------------------------------- DDCAPS* C_VIDEODBG::GetCapsHEL(void){ if( m_pDD )m_pDD->GetCaps(&ddCaps,&ddCapsHEL); return &ddCapsHEL; }; //------------------------------------------------------- void C_VIDEODBG::GetCaps(DDCAPS* ddCaps){ if( m_pDD )m_pDD->GetCaps(ddCaps,&ddCapsHEL); }; //------------------------------------------------------- void C_VIDEODBG::UpdateCaps(void){ if( m_pDD )m_pDD->GetCaps(&ddCaps,&ddCapsHEL); }; //------------------------------------------------------- C_VIDEODBG::~C_VIDEODBG(){ //destroy if( m_pDD ) m_pDD->Release(); }; //------------------------------------------------------- #endif Прочту все ваши мнения и предложения. |
|
| Автор: | MagicWolf [ 20 мар 2006 12:40 ] |
| Заголовок сообщения: | |
Увы, не чем не могу помочь, так как с DX не работал. |
|
| Автор: | MagicWolf [ 20 мар 2006 12:46 ] |
| Заголовок сообщения: | |
Насчет жидов - это ты лишнее сказанул. А насчет профессионалов можно сказать однозначно - они как правило отвечать на такие вопросы не будут, так как у них свои профессиональные делишки. И посмотри на результаты голосования на PMG: http://opros.nodex.ru/2000/fast-cgi-bin ... ?&id=37413 На сайт зашел пока один, одинокий профессионал
|
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|