Как я определяю, сколько VRAM доступно на моей видеокарте?
Q: Как я определяю, сколько VRAM доступно на моей видеокарте?
A: CGLQueryRendererInfo() и CGLDescribeRenderer() функции позволяют Вам получать свойства средств рендеринга в Вашей системе, включая их размеры VRAM. На OS X 10.7 и позже, можно запросить средство рендеринга с kCGLRPVideoMemoryMegabytes параметр для получения числа мегабайтов видеопамяти, доступной средству рендеринга.
См. Ссылочные Свойства Средства рендеринга CGL для полного списка констант свойства средства рендеринга включая kCGLRPVideoMemoryMegabytes, kCGLRPTextureMemoryMegabytes, и т.д.
Перечисление 1 демонстрирует, как определить размер VRAM для Вашего текущего средства рендеринга OpenGL.
Перечисление 1 , Находящее размер текущего средства рендеринга VRAM
- (void)logVideoMemoryCurrentRenderer |
{ |
GLint virtualScreen = [[self openGLContext] currentVirtualScreen]; |
// Since this may be called from outside the display loop, make sure |
// the context is current so the GL calls all work properly. |
[[self openGLContext] makeCurrentContext]; |
// Use the current virtual screen index to interrogate the pixel format |
// for its display mask and renderer id. |
// Note, "pixelFormat" is the NSOpenGLPixelFormat that your OpenGL context |
// is created from, typically created in your OpenGL view's -initWithFrame: |
GLint displayMask; |
GLint rendererID; |
[pixelFormat getValues:&displayMask forAttribute:NSOpenGLPFAScreenMask forVirtualScreen:virtualScreen]; |
[pixelFormat getValues:&rendererID forAttribute:NSOpenGLPFARendererID forVirtualScreen:virtualScreen]; |
// Get renderer info for all renderers that match the display mask. |
GLint i, nrend = 0; |
CGLRendererInfoObj rend; |
CGLQueryRendererInfo((GLuint)displayMask, &rend, &nrend); |
GLint videoMemory = 0; |
for (i = 0; i < nrend; i++) |
{ |
GLint thisRendererID; |
CGLDescribeRenderer(rend, i, kCGLRPRendererID, &thisRendererID); |
// See if this is the one we want |
if (thisRendererID == rendererID) { |
CGLDescribeRenderer(rend, i, kCGLRPVideoMemoryMegabytes, &videoMemory); |
NSLog(@"%@", [NSString stringWithCString:(const char *)glGetString(GL_RENDERER) |
encoding:NSASCIIStringEncoding]); |
NSLog(@"Renderer ID = 0x%x", thisRendererID); |
NSLog(@"Video Memory = %d MB", videoMemory); |
} |
} |
CGLDestroyRendererInfo(rend); |
} |
Если Вы ищете размеры VRAM всех средств рендеринга в Вашей системе, включая тех, которые не привязаны к мониторам (оффлайновые средства рендеринга), можно указать a -1/0xFFFFFFFF маска дисплея в CGLQueryRendererInfo() функция. См. Перечисление 2 для примера.
Перечисление 2 , Находящее размеры всех средств рендеринга VRAM
- (void)logVideoMemoryAllRenderers |
{ |
// Get renderer info for all renderers that match the display mask. |
GLint i, nrend = 0; |
CGLRendererInfoObj rend; |
// Using a -1/0xFFFFFFFF display mask enables us to find all renderers, |
// including those GPUs that are not attached to monitors, aka. offline renderers. |
const GLint displayMask = 0xFFFFFFFF; |
CGLQueryRendererInfo((GLuint)displayMask, &rend, &nrend); |
for(i = 0; i < nrend; i++) |
{ |
GLint thisRendererID; |
GLint videoMemory = 0; |
CGLDescribeRenderer(rend, i, kCGLRPRendererID, &thisRendererID); |
NSLog(@"Renderer ID = 0x%x", thisRendererID); |
CGLDescribeRenderer(rend, i, kCGLRPVideoMemoryMegabytes, &videoMemory); |
NSLog(@"Video Memory = %d MB", videoMemory); |
} |
CGLDestroyRendererInfo(rend); |
} |
История версии документа
| Дата | Примечания |
|---|---|
| 11.03.2014 | Обновленный для OS X 10.9. |
| 11.10.2004 | Новый документ, что использование CGLDescribeRenderer для нахождения физического размера VRAM на установленном оборудовании. |