Обеспечение аппаратно ускоренного рендеринга для приложения OpenGL
Q: Как я выбираю аппаратно ускоренное средство рендеринга и препятствую тому, чтобы оно попало в средство рендеринга программного обеспечения?
A: Как я выбираю аппаратно ускоренное средство рендеринга и препятствую тому, чтобы оно попало в средство рендеринга программного обеспечения?
Когда аппаратные ресурсы не достаточны для данной работы, реализация Mac OS X OpenGL позволяет приложению корректно переключаться на средство рендеринга программного обеспечения как система восстановления после отказа. В то время как большинство приложений получит преимущества от этого восстановления существуют определенные приложения, которые могли бы хотеть отключить эту опцию.
Производительность управляемые приложения, как игры, должна остаться в аппаратно ускоренных средствах рендеринга, чтобы достигнуть и поддержать приемлемую частоту кадров.
Простой способ выбрать аппаратно ускоренное средство рендеринга без выбора нейтрализации программного обеспечения путем выбора следующих атрибутов формата пикселя:
Для CGL:
kCGLPFAAccelerated и kCGLPFANoRecovery
Для AGL:
AGL_ACCELERATED и AGL_NO_RECOVERY
Для NSOpenGL:
NSOpenGLPFAAccelerated и NSOpenGLPFANoRecovery
Используя *noRecovery атрибут формата пикселя не предотвратит использование обработки вершины программного обеспечения в таких случаях, где запрос получения превышает аппаратные ресурсы.
Перечисление 1 , Создающее Объект Формата пикселя с Ускоренным и атрибутами NoRecovery.
- initWithFrame:(NSRect)frameRect
{
NSOpenGLPixelFormatAttribute attrs[] = {
NSOpenGLPFANoRecovery,
NSOpenGLPFAColorSize, 24,
NSOpenGLPFADepthSize, 16,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAAccelerated,
0
};
long rendererID;
NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
// Report the renderer ID that this pixel format binds to
// CGLRenderers.h contains a list of known renderers and their corresponding RendererID codes.
// Also at http://developer.apple.com/documentation/GraphicsImaging/Reference/CGL_OpenGL/
[pixelFormat getValues:&rendererID forAttribute:NSOpenGLPFARendererID forVirtualScreen:0];
NSLog(@"NSOpenGLView pixelFormat RendererID = %08x", (unsigned)rendererID);
self = [super initWithFrame:frameRect pixelFormat:pixelFormat];
return self;
} |
Раздел Techniques for Choosing Attributes Руководства по программированию OpenGL для Mac OS X предоставляет дополнительную информацию об этом предмете.
Определение, выполнится ли текущее состояние получения в GPU
CGL обеспечивает два параметра для проверки, использует ли система GPU для обработки: kCGLCPGPUVertexProcessing и kCGLCPGPUFragmentProcessing. Для проверки обработки вершины передайте вершину, постоянную
Перечисление 2 Используя CGL, чтобы проверить, обрабатывает ли GPU вершины и фрагменты.
BOOL gpuProcessing;
GLint fragmentGPUProcessing, vertexGPUProcessing;
CGLGetParameter (CGLGetCurrentContext(), kCGLCPGPUFragmentProcessing,
&fragmentGPUProcessing);
CGLGetParameter(CGLGetCurrentContext(), kCGLCPGPUVertexProcessing,
&vertexGPUProcessing);
gpuProcessing = (fragmentGPUProcessing && vertexGPUProcessing) ? YES : NO; |
Вышеупомянутое перечисление установит gpuProcessing к YES для в настоящее время связанной программы построения теней, если это выполнится в GPU.
История версии документа
| Дата | Примечания |
|---|---|
| 18.07.2007 | Новый документ, что с помощью атрибута формата пикселя NoRecovery и как проверить, выполняется ли обработка вершины и фрагмента на GPU или CPU |