How can I check how much video ram is being used/free (in this case when using opengl)? First thing I can think of is to find a way to check memory amount used by the image or whatever related to graphics and with it calculate used/free memory. But this is probably incorrect and/or ineffective. Do graphic apis have this functionality built in?
Check video ram usage
If you're using GL2+, just do this:
int getFreeVideoMemory()
{
int availableKB[4];
#ifdef GL234
if(GLEW_NVX_gpu_memory_info)
glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX,&availableKB[0]);
int temp=GLEW_ATI_meminfo;
if(GLEW_ATI_meminfo)
glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI,availableKB);
return availableKB[0];
#endif
return 0;
}
Does that work with GL 3.2?
It *should*. I use it with GL 3.3 just fine.
Wow, didn't know that, nice one![]()
I have 1gb video ram but i always get different result, i added
std::ofstream outfile;
outfile.open ("log.txt", std::fstream::out | std::fstream::app);
outfile << (int)availableKB << std::endl;
outfile << std::endl;
outfile.close();
between #endif and return 0;
and the output is
2554664 //first run
2488132 //second run
3799208 // third run
I called the function only once after initializing opengl.
Is there something that i am doing wrong?
What does #ifdef GL234 do?
Which brand is your card?
Try initializing availableKB to -1 or something to make sure it's being set. Also note that it's an array, try printing (int)availableKB[0]
Which brand is your card?
I am using ATI, but I was looking for universal solution regardless of brand.
Try initializing availableKB to -1 or something to make sure it's being set. Also note that it's an array, try printing (int)availableKB[0]
if i set availableKB to anything the value will not change afterwards, and printing (int)availableKB[0] gives negative value.
There is no universal solution. You have to use manufacturer/brand/? specific extensions.
If you use this, does it print out either brand?
int getFreeVideoMemory()
{
int availableKB[]={-1,-1,-1,-1};
if(GLEW_NVX_gpu_memory_info)
{
glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX,&availableKB[0]);
printf("NVidia card\n");
}
int temp=GLEW_ATI_meminfo;
if(GLEW_ATI_meminfo)
{
glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI,availableKB);
printf("ATI card\n");
}
return availableKB[0];
}
no it doesn't print out anything
There are plenty of factors that could cause the amount of available video RAM to vary. On a modern OS the window manager may be using some of the video RAM. On windows Vista or higher video RAM is virtualized so results can vary. Video RAM may be fragmented from previous runs so free space can be affected. With anything that uses a dedicated/shared memory architecture (e.g. Intel) you'll get a figure that may be just the amount of dedicated RAM left (i.e. quite low) or may be the total of dedicated + available system memory, or anything in between. Basically this isn't a figure that you should be basing crucial decisions in your program on; instead it seems better to me to use rough ballparks (e.g. with GL 3.x level hardware things are fairly well standardized at the ~1gb mark or higher).
Turns out that ATI Radeon HD 6450 1GB DDR3 for whatever reason doesn't have support for GLEW_ATI_meminfo
I changed GLEW_ATI_meminfo to GL_ATI_meminfo and now the program prints out brand of the card.
There is no support for GL_ATI_meminfo or GL_NVX_gpu_memory_info but the code seems to work no problem with this.
But I still get negative value.
Topic Locked
This topic has been locked by a moderator. New replies are not allowed.