Vuo  2.0.0
VuoCglPixelFormat.c
Go to the documentation of this file.
1 
10 #include "VuoCglPixelFormat.h"
11 
12 #include <string.h>
13 
14 #include "module.h"
15 
16 #ifdef VUO_COMPILER
18  "title" : "VuoCglPixelFormat"
19  });
20 #endif
21 
22 
28 char *VuoCglPixelFormat_getAttributeText(CGLPixelFormatAttribute a)
29 {
30 #pragma clang diagnostic push
31 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
32  if (a == kCGLPFAAllRenderers) return strdup("kCGLPFAAllRenderers");
33  if (a == kCGLPFATripleBuffer) return strdup("kCGLPFATripleBuffer");
34  if (a == kCGLPFADoubleBuffer) return strdup("kCGLPFADoubleBuffer");
35  if (a == kCGLPFAColorSize) return strdup("kCGLPFAColorSize");
36  if (a == kCGLPFAAlphaSize) return strdup("kCGLPFAAlphaSize");
37  if (a == kCGLPFADepthSize) return strdup("kCGLPFADepthSize");
38  if (a == kCGLPFAStencilSize) return strdup("kCGLPFAStencilSize");
39  if (a == kCGLPFAMinimumPolicy) return strdup("kCGLPFAMinimumPolicy");
40  if (a == kCGLPFAMaximumPolicy) return strdup("kCGLPFAMaximumPolicy");
41  if (a == kCGLPFASampleBuffers) return strdup("kCGLPFASampleBuffers");
42  if (a == kCGLPFASamples) return strdup("kCGLPFASamples");
43  if (a == kCGLPFAColorFloat) return strdup("kCGLPFAColorFloat");
44  if (a == kCGLPFAMultisample) return strdup("kCGLPFAMultisample");
45  if (a == kCGLPFASupersample) return strdup("kCGLPFASupersample");
46  if (a == kCGLPFASampleAlpha) return strdup("kCGLPFASampleAlpha");
47  if (a == kCGLPFARendererID) return strdup("kCGLPFARendererID");
48  if (a == kCGLPFANoRecovery) return strdup("kCGLPFANoRecovery");
49  if (a == kCGLPFAAccelerated) return strdup("kCGLPFAAccelerated");
50  if (a == kCGLPFAClosestPolicy) return strdup("kCGLPFAClosestPolicy");
51  if (a == kCGLPFABackingStore) return strdup("kCGLPFABackingStore");
52  if (a == 77 /*kCGLPFABackingVolatile*/) return strdup("kCGLPFABackingVolatile");
53  if (a == kCGLPFADisplayMask) return strdup("kCGLPFADisplayMask");
54  if (a == kCGLPFAAllowOfflineRenderers) return strdup("kCGLPFAAllowOfflineRenderers");
55  if (a == kCGLPFAAcceleratedCompute) return strdup("kCGLPFAAcceleratedCompute");
56  if (a == kCGLPFAOpenGLProfile) return strdup("kCGLPFAOpenGLProfile");
57  if (a == 101 /*kCGLPFASupportsAutomaticGraphicsSwitching*/) return strdup("kCGLPFASupportsAutomaticGraphicsSwitching");
58  if (a == kCGLPFAVirtualScreenCount) return strdup("kCGLPFAVirtualScreenCount");
59  if (a == kCGLPFAAuxBuffers) return strdup("kCGLPFAAuxBuffers");
60  if (a == kCGLPFAAccumSize) return strdup("kCGLPFAAccumSize");
61  if (a == kCGLPFAAuxDepthStencil) return strdup("kCGLPFAAuxDepthStencil");
62  if (a == kCGLPFAStereo) return strdup("kCGLPFAStereo");
63  if (a == kCGLPFAOffScreen) return strdup("kCGLPFAOffScreen");
64  if (a == kCGLPFAWindow) return strdup("kCGLPFAWindow");
65  if (a == kCGLPFACompliant) return strdup("kCGLPFACompliant");
66  if (a == kCGLPFAPBuffer) return strdup("kCGLPFAPBuffer");
67  if (a == kCGLPFARemotePBuffer) return strdup("kCGLPFARemotePBuffer");
68  if (a == kCGLPFASingleRenderer) return strdup("kCGLPFASingleRenderer");
69  if (a == kCGLPFARobust) return strdup("kCGLPFARobust");
70  if (a == kCGLPFAMPSafe) return strdup("kCGLPFAMPSafe");
71  if (a == kCGLPFAMultiScreen) return strdup("kCGLPFAMultiScreen");
72  if (a == kCGLPFAFullScreen) return strdup("kCGLPFAFullScreen");
73 #pragma clang diagnostic pop
74 
75  char *text;
76  asprintf(&text, "unknown (%d)", a);
77  return text;
78 }
79 
83 void VuoCglPixelFormat_logDiff(CGLPixelFormatObj a, CGLPixelFormatObj b)
84 {
85  CGLPixelFormatAttribute pfas[] = {
86 #pragma clang diagnostic push
87 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
88  kCGLPFAAllRenderers,
89  kCGLPFATripleBuffer,
90  kCGLPFADoubleBuffer,
91  kCGLPFAColorSize,
92  kCGLPFAAlphaSize,
93  kCGLPFADepthSize,
94  kCGLPFAStencilSize,
95  kCGLPFAMinimumPolicy,
96  kCGLPFAMaximumPolicy,
97  kCGLPFASampleBuffers,
98  kCGLPFASamples,
99  kCGLPFAColorFloat,
100  kCGLPFAMultisample,
101  kCGLPFASupersample,
102  kCGLPFASampleAlpha,
103  kCGLPFARendererID,
104  kCGLPFANoRecovery,
105  kCGLPFAAccelerated,
106  kCGLPFAClosestPolicy,
107  kCGLPFABackingStore,
108  77, //kCGLPFABackingVolatile,
109  kCGLPFADisplayMask,
110  kCGLPFAAllowOfflineRenderers,
111  kCGLPFAAcceleratedCompute,
112  kCGLPFAOpenGLProfile,
113  101, //kCGLPFASupportsAutomaticGraphicsSwitching,
114 // kCGLPFAVirtualScreenCount,
115  kCGLPFAAuxBuffers,
116  kCGLPFAAccumSize,
117  kCGLPFAAuxDepthStencil,
118  kCGLPFAStereo,
119  kCGLPFAOffScreen,
120  kCGLPFAWindow,
121  kCGLPFACompliant,
122  kCGLPFAPBuffer,
123  kCGLPFARemotePBuffer,
124  kCGLPFASingleRenderer,
125  kCGLPFARobust,
126  kCGLPFAMPSafe,
127  kCGLPFAMultiScreen,
128  kCGLPFAFullScreen,
129 #pragma clang diagnostic pop
130  };
131  int pfaCount = sizeof(pfas)/sizeof(pfas[0]);
132 
133  VUserLog("CGLPixelFormat differences:");
134  bool different = false;
135  for (int i = 0; i < pfaCount; ++i)
136  {
137  char *s = VuoCglPixelFormat_getAttributeText(pfas[i]);
138  GLint valueA, valueB;
139  CGLError error = CGLDescribePixelFormat(a, 0, pfas[i], &valueA);
140  if (error != kCGLNoError)
141  {
142  VUserLog(" Error retrieving PFA %s: %s", s, CGLErrorString(error));
143  free(s);
144  continue;
145  }
146  error = CGLDescribePixelFormat(b, 0, pfas[i], &valueB);
147  if (error != kCGLNoError)
148  {
149  VUserLog(" Error retrieving PFA %s: %s", s, CGLErrorString(error));
150  free(s);
151  continue;
152  }
153 
154  if (valueA != valueB)
155  {
156  VUserLog(" %30s: %d vs %d", s, valueA, valueB);
157  different = true;
158  }
159 
160  free(s);
161  }
162 
163  if (!different)
164  VUserLog(" (none)");
165 }
166 
172 char *VuoCglRenderer_getText(int rendererID)
173 {
174  rendererID &= kCGLRendererIDMatchingMask;
175 
176 #pragma clang diagnostic push
177 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
178  if (rendererID == kCGLRendererGenericFloatID ) return strdup("Apple Software Renderer (GenericFloat)");
179  else if (rendererID == kCGLRendererAppleSWID ) return strdup("Apple Software Renderer (AppleSW)");
180  else if (rendererID == kCGLRendererATIRage128ID ) return strdup("ATI Rage 128");
181  else if (rendererID == kCGLRendererATIRadeonID ) return strdup("ATI Radeon");
182  else if (rendererID == kCGLRendererATIRageProID ) return strdup("ATI Rage Pro");
183  else if (rendererID == kCGLRendererATIRadeon8500ID ) return strdup("ATI Radeon 8500");
184  else if (rendererID == kCGLRendererATIRadeon9700ID ) return strdup("ATI Radeon 9700");
185  else if (rendererID == kCGLRendererATIRadeonX1000ID ) return strdup("ATI Radeon X1xxx");
186  else if (rendererID == kCGLRendererATIRadeonX2000ID ) return strdup("ATI Radeon HD 2xxx/4xxx");
187  else if (rendererID == kCGLRendererATIRadeonX3000ID ) return strdup("ATI Radeon HD 5xxx/6xxx");
188  else if (rendererID == kCGLRendererATIRadeonX4000ID ) return strdup("ATI Radeon HD 7xxx");
189  else if (rendererID == 0x21d00 ) return strdup("AMD Radeon X5000"); // unconfirmed
190  else if (rendererID == 0x21e00 ) return strdup("AMD Radeon X6000");
191  else if (rendererID == kCGLRendererGeForce2MXID ) return strdup("NVIDIA GeForce 2MX/4MX");
192  else if (rendererID == kCGLRendererGeForce3ID ) return strdup("NVIDIA GeForce 3/4Ti");
193  else if (rendererID == kCGLRendererGeForceFXID ) return strdup("NVIDIA GeForce 5xxx/6xxx/7xxx or Quadro FX 4500");
194  else if (rendererID == kCGLRendererGeForce8xxxID ) return strdup("NVIDIA GeForce 8xxx/9xxx/1xx/2xx/3xx or Quadro 4800");
195  else if (rendererID == kCGLRendererGeForceID ) return strdup("NVIDIA GeForce 6xx or Quadro 4000/K5000");
196  else if (rendererID == kCGLRendererVTBladeXP2ID ) return strdup("VTBladeXP2");
197  else if (rendererID == kCGLRendererIntel900ID ) return strdup("Intel GMA 950");
198  else if (rendererID == kCGLRendererIntelX3100ID ) return strdup("Intel X3100");
199  else if (rendererID == kCGLRendererIntelHDID ) return strdup("Intel HD 3000");
200  else if (rendererID == kCGLRendererIntelHD4000ID ) return strdup("Intel HD 4000");
201  else if (rendererID == kCGLRendererIntelHD5000ID ) return strdup("Intel HD 5000 (Iris)");
202  else if (rendererID == kCGLRendererMesa3DFXID ) return strdup("Mesa 3DFX");
203 #pragma clang diagnostic pop
204 
205  char *t;
206  asprintf(&t, "unknown (0x%x)", rendererID);
207  return t;
208 }