From 12f7365f1f58d648217b16f09c2152fa47dcd7a1 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Thu, 16 Jul 2009 17:20:16 -0700 Subject: [PATCH] XQuartz: Cleanup getGlCapabilities to avoid hardcoding the number of displays --- hw/xquartz/GL/capabilities.c | 57 ++++++++++++------------------------ 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/hw/xquartz/GL/capabilities.c b/hw/xquartz/GL/capabilities.c index f7d45faff..99b9eae61 100644 --- a/hw/xquartz/GL/capabilities.c +++ b/hw/xquartz/GL/capabilities.c @@ -425,7 +425,7 @@ static CGLError handleRendererDescriptions(CGLRendererInfoObj info, GLint r, handleAccumulationModes(c, flags); - return 0; + return kCGLNoError; } static void initCapabilities(struct glCapabilities *cap) { @@ -491,56 +491,36 @@ void freeGlCapabilities(struct glCapabilities *cap) { cap->configurations = NULL; } -#define MAX_DISPLAYS 32 - /*Return true if an error occured. */ bool getGlCapabilities(struct glCapabilities *cap) { - CGDirectDisplayID dspys[MAX_DISPLAYS]; - CGDisplayErr err; - CGOpenGLDisplayMask displayMask; - CGDisplayCount i, displayCount = 0; + CGLRendererInfoObj info; + CGLError err; + GLint numRenderers = 0, r; initCapabilities(cap); - - err = CGGetActiveDisplayList(MAX_DISPLAYS, dspys, &displayCount); + + err = CGLQueryRendererInfo((GLuint)-1, &info, &numRenderers); if(err) { - fprintf(stderr, "CGGetActiveDisplayList error: %s\n", CGLErrorString(err)); - return true; - } - - for(i = 0; i < displayCount; ++i) { - displayMask = CGDisplayIDToOpenGLDisplayMask(dspys[i]); - - CGLRendererInfoObj info; - GLint numRenderers = 0, r, renderCount = 0; - - err = CGLQueryRendererInfo(displayMask, &info, &numRenderers); - - if(err) { fprintf(stderr, "CGLQueryRendererInfo error: %s\n", CGLErrorString(err)); - fprintf(stderr, "trying to continue...\n"); - continue; + return err; } - - CGLDescribeRenderer(info, 0, kCGLRPRendererCount, &renderCount); - for(r = 0; r < renderCount; ++r) { - CGLError derr; + for(r = 0; r < numRenderers; r++) { struct glCapabilitiesConfig tmpconf, *conf; initConfig(&tmpconf); - derr = handleRendererDescriptions(info, r, &tmpconf); - if(derr) { - fprintf(stderr, "error: %s\n", CGLErrorString(derr)); - fprintf(stderr, "trying to continue...\n"); - continue; + err = handleRendererDescriptions(info, r, &tmpconf); + if(err) { + fprintf(stderr, "handleRendererDescriptions returned error: %s\n", CGLErrorString(err)); + fprintf(stderr, "trying to continue...\n"); + continue; } conf = malloc(sizeof(*conf)); if(NULL == conf) { - perror("malloc"); - abort(); + perror("malloc"); + abort(); } /* Copy the struct. */ @@ -551,9 +531,8 @@ bool getGlCapabilities(struct glCapabilities *cap) { cap->configurations = conf; } - CGLDestroyRendererInfo(info); - } - + CGLDestroyRendererInfo(info); + /* No error occured. We are done. */ - return false; + return kCGLNoError; }