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

Function getDefaultFBConfig

server/glxvisual.cpp:1028–1091  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1026
1027
1028VGLFBConfig getDefaultFBConfig(Display *dpy, int screen, VisualID vid)
1029{
1030 if(!buildVisAttribTable(dpy, screen)) return NULL;
1031 GET_VA_TABLE()
1032
1033 for(int i = 0; i < vaEntries; i++)
1034 {
1035 if(va[i].visualID == vid)
1036 {
1037 if(va[i].config) return va[i].config;
1038
1039 if(va[i].glx.doubleBuffer < 0 || va[i].glx.alphaSize < 0
1040 || va[i].glx.depthSize < 0 || va[i].glx.stencilSize < 0
1041 || va[i].glx.samples < 0)
1042 return NULL;
1043
1044 int glxattribs[] = { GLX_DOUBLEBUFFER, va[i].glx.doubleBuffer,
1045 GLX_RED_SIZE, 8, GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8,
1046 GLX_ALPHA_SIZE, va[i].glx.alphaSize, GLX_RENDER_TYPE, GLX_RGBA_BIT,
1047 GLX_STEREO, va[i].isStereo,
1048 GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT |
1049 (va[i].glx.samples ? 0 : GLX_PIXMAP_BIT) | GLX_WINDOW_BIT,
1050 GLX_X_VISUAL_TYPE,
1051 va[i].c_class == DirectColor ? GLX_DIRECT_COLOR : GLX_TRUE_COLOR,
1052 GLX_DEPTH_SIZE, va[i].glx.depthSize,
1053 GLX_STENCIL_SIZE, va[i].glx.stencilSize,
1054 GLX_SAMPLES, va[i].glx.samples, None };
1055 if(va[i].depth == 30 || (va[i].depth == 32 && va[i].bpc == 10))
1056 {
1057 glxattribs[3] = glxattribs[5] = glxattribs[7] = 10;
1058 }
1059
1060 int n;
1061 VGLFBConfig *configs = chooseFBConfig(dpy, screen, glxattribs, n);
1062 if(configs)
1063 {
1064 // Make sure that the FB config actually has the requested
1065 // attributes, i.e. that its attributes are unique among the
1066 // list of visuals. Otherwise, skip it.
1067 int actualDB = getFBConfigAttrib(dpy, configs[0], GLX_DOUBLEBUFFER);
1068 int actualDepth = getFBConfigAttrib(dpy, configs[0], GLX_DEPTH_SIZE);
1069
1070 if(configs[0]->attr.alphaSize >= 0
1071 && !!configs[0]->attr.alphaSize == !!va[i].glx.alphaSize
1072 && !!actualDB == !!va[i].glx.doubleBuffer
1073 && configs[0]->attr.stencilSize >= 0
1074 && !!configs[0]->attr.stencilSize == !!va[i].glx.stencilSize
1075 && !!actualDepth == !!va[i].glx.depthSize
1076 && configs[0]->attr.samples >= 0
1077 && configs[0]->attr.samples == va[i].glx.samples)
1078 {
1079 if(fconfig.trace)
1080 vglout.println("[VGL] Visual 0x%.2x has default FB config 0x%.2x",
1081 (unsigned int)va[i].visualID, configs[0]->id);
1082 va[i].config = configs[0];
1083 }
1084 _XFree(configs);
1085 }

Callers 1

VGLFBConfig matchConfigFunction · 0.85

Calls 4

buildVisAttribTableFunction · 0.85
chooseFBConfigFunction · 0.85
printlnMethod · 0.80
getFBConfigAttribFunction · 0.70

Tested by

no test coverage detected