Advertisement
Guest User

GLGPUMem

a guest
Sep 18th, 2012
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1. boost::uint32_t GLRenderer::availableMemory()
  2. {
  3.     boost::uint32_t memorySize;
  4.     bool nvx = false, amd = false;
  5.     // glew breaks glGetString(GL_EXTENSIONS), so use glGetStringi instead and look for all extensions
  6.     GLint numExtensions;
  7.     glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);
  8.     for(GLint i = 0; (i < numExtensions) && !nvx && !amd; i++)
  9.     {
  10.         const char* extensions = reinterpret_cast<const char*>(glGetStringi(GL_EXTENSIONS, i));
  11.         if(strstr(extensions, "GL_NVX_gpu_memory_info")) nvx = true;
  12.         if(strstr(extensions, "GL_ATI_meminfo")) amd = true;
  13.     }
  14.     #warning TODO: check if I was doing something wrong here and fix. And if I wasn't move extension query to context initialization
  15.     // doesn't work for some reason, but calling glGetIntegerv with th nvx values works... strange
  16.     //if(GLEW_NVX_gpu_memory_info || glewIsSupported("GL_NVX_gpu_memory_info") || glewGetExtension("GL_NVX_gpu_memory_info"))
  17.     if(nvx)
  18.     {
  19.         // from http://developer.download.nvidia.com/opengl/specs/GL_NVX_gpu_memory_info.txt
  20.         //GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX          0x9047
  21.         //GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX    0x9048
  22.         //GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX  0x9049
  23.         //GPU_MEMORY_INFO_EVICTION_COUNT_NVX            0x904A
  24.         //GPU_MEMORY_INFO_EVICTED_MEMORY_NVX            0x904B
  25.         glGetIntegerv(0x9049, reinterpret_cast<GLint*>(&memorySize));
  26.         // to bytes
  27.         memorySize *= 1024;
  28.     }
  29.     else if(amd)
  30.     {
  31.         memorySize = 0;
  32.         // Don't really know if that does what I think it does and can't check without an AMD card
  33.         GLint data[4];
  34.         //VBO_FREE_MEMORY_ATI                     0x87FB
  35.         //TEXTURE_FREE_MEMORY_ATI                 0x87FC
  36.         //RENDERBUFFER_FREE_MEMORY_ATI            0x87FD
  37.         glGetIntegerv(0x87FB, data);
  38.         memorySize += data[0];
  39.         glGetIntegerv(0x87FC, data);
  40.         memorySize += data[0];
  41.         glGetIntegerv(0x87FD, data);
  42.         memorySize += data[0];
  43.         // to bytes
  44.         memorySize *= 1024;
  45.     }
  46.     else return 0;
  47.     return memorySize;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement