MCPcopy Create free account
hub / github.com/VirtualGL/virtualgl / assignDefaultFBConfigAttribs

Function assignDefaultFBConfigAttribs

server/glxvisual.cpp:104–202  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

102static void buildCfgAttribTable(Display *dpy, int screen);
103
104static void assignDefaultFBConfigAttribs(Display *dpy, int screen,
105 XVisualInfo *visuals, int nVisuals, int visualDepth, int visualClass,
106 int visualBPC, bool stereo, VisAttrib *va)
107{
108 int alphaSize = -1, doubleBuffer = -1, stencilSize = -1, depthSize = -1,
109 numSamples = -1;
110
111 if(nVisuals < 1) return;
112
113 buildCfgAttribTable(dpy, screen);
114 GET_CA_TABLE()
115
116 // Allow the default FB config attribs to be manually specified.
117 if(strlen(fconfig.defaultfbconfig) > 0)
118 {
119 char *str = strdup(fconfig.defaultfbconfig);
120 if(!str) THROW_UNIX();
121 char *argv[512]; int argc = 0;
122 char *arg = strtok(str, ", \t");
123 while(arg && argc < 512)
124 {
125 argv[argc] = arg; argc++;
126 arg = strtok(NULL, ", \t");
127 }
128 for(int i = 0; i < argc; i++)
129 {
130 TEST_ATTRIB(GLX_ALPHA_SIZE, alphaSize, 0, INT_MAX);
131 TEST_ATTRIB(GLX_DOUBLEBUFFER, doubleBuffer, 0, 1);
132 TEST_ATTRIB(GLX_STENCIL_SIZE, stencilSize, 0, INT_MAX);
133 TEST_ATTRIB(GLX_DEPTH_SIZE, depthSize, 0, INT_MAX);
134 TEST_ATTRIB(GLX_SAMPLES, numSamples, 0, INT_MAX);
135 }
136 free(str);
137 }
138
139 if(fconfig.samples >= 0) numSamples = fconfig.samples;
140 if(fconfig.forcealpha) alphaSize = 1;
141
142 // Determine the range of values that the FB configs provide.
143 int minAlpha = INT_MAX, maxAlpha = 0, minDB = 0, maxDB = 1,
144 minStencil = INT_MAX, maxStencil = 0, minDepth = 24, maxDepth = 24,
145 minSamples = INT_MAX, maxSamples = 0;
146 for(int i = 0; i < caEntries; i++)
147 {
148 if(ca[i].attr.alphaSize < 0 || ca[i].attr.stencilSize < 0
149 || ca[i].attr.samples < 0)
150 continue;
151 minAlpha = min(minAlpha, ca[i].attr.alphaSize);
152 maxAlpha = max(maxAlpha, ca[i].attr.alphaSize);
153 minStencil = min(minStencil, ca[i].attr.stencilSize);
154 maxStencil = max(maxStencil, ca[i].attr.stencilSize);
155 minSamples = min(minSamples, ca[i].attr.samples);
156 maxSamples = max(maxSamples, ca[i].attr.samples);
157 }
158 if(minAlpha < 0) minAlpha = 0;
159 minAlpha = !!minAlpha; maxAlpha = !!maxAlpha;
160 if(minStencil < 0) minStencil = 0;
161 minStencil = 8 * !!minStencil; maxStencil = 8 * !!maxStencil;

Callers 1

buildVisAttribTableFunction · 0.85

Calls 3

buildCfgAttribTableFunction · 0.85
minFunction · 0.50
maxFunction · 0.50

Tested by

no test coverage detected