Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- boost::uint32_t GLRenderer::availableMemory()
- {
- boost::uint32_t memorySize;
- bool nvx = false, amd = false;
- // glew breaks glGetString(GL_EXTENSIONS), so use glGetStringi instead and look for all extensions
- GLint numExtensions;
- glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);
- for(GLint i = 0; (i < numExtensions) && !nvx && !amd; i++)
- {
- const char* extensions = reinterpret_cast<const char*>(glGetStringi(GL_EXTENSIONS, i));
- if(strstr(extensions, "GL_NVX_gpu_memory_info")) nvx = true;
- if(strstr(extensions, "GL_ATI_meminfo")) amd = true;
- }
- #warning TODO: check if I was doing something wrong here and fix. And if I wasn't move extension query to context initialization
- // doesn't work for some reason, but calling glGetIntegerv with th nvx values works... strange
- //if(GLEW_NVX_gpu_memory_info || glewIsSupported("GL_NVX_gpu_memory_info") || glewGetExtension("GL_NVX_gpu_memory_info"))
- if(nvx)
- {
- // from http://developer.download.nvidia.com/opengl/specs/GL_NVX_gpu_memory_info.txt
- //GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
- //GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
- //GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
- //GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
- //GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
- glGetIntegerv(0x9049, reinterpret_cast<GLint*>(&memorySize));
- // to bytes
- memorySize *= 1024;
- }
- else if(amd)
- {
- memorySize = 0;
- // Don't really know if that does what I think it does and can't check without an AMD card
- GLint data[4];
- //VBO_FREE_MEMORY_ATI 0x87FB
- //TEXTURE_FREE_MEMORY_ATI 0x87FC
- //RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
- glGetIntegerv(0x87FB, data);
- memorySize += data[0];
- glGetIntegerv(0x87FC, data);
- memorySize += data[0];
- glGetIntegerv(0x87FD, data);
- memorySize += data[0];
- // to bytes
- memorySize *= 1024;
- }
- else return 0;
- return memorySize;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement