Changeset 45248 in vbox for trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c
- Timestamp:
- Mar 29, 2013 2:57:24 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 84629
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c
r44951 r45248 52 52 53 53 cr_server.screenCount = 0; 54 cr_server. bForceOffscreenRendering = CR_SERVER_REDIR_NONE;55 cr_server. bOffscreenRenderingDefault = cr_server.bForceOffscreenRendering;54 cr_server.fPresentMode = CR_SERVER_REDIR_F_NONE; 55 cr_server.fPresentModeDefault = cr_server.fPresentMode; 56 56 cr_server.bUsePBOForReadback = GL_FALSE; 57 57 cr_server.bUseOutputRedirect = GL_FALSE; 58 } 59 60 static int crServerVBoxParseNumerics(const char *pszStr, const int defaultVal) 61 { 62 int result = 0; 63 bool neg = false; 64 unsigned char iDigit = 0; 65 if (!pszStr || pszStr[0] == '\0') 66 return defaultVal; 67 68 for (;;) 69 { 70 if (pszStr[0] == '\0') 71 return defaultVal; 72 73 if (pszStr[0] == ' ' || pszStr[0] == '\t' || pszStr[0] == '\n') 74 { 75 ++pszStr; 76 continue; 77 } 78 79 if (pszStr[0] == '-') 80 { 81 if (neg) 82 return defaultVal; 83 84 neg = true; 85 ++pszStr; 86 continue; 87 } 88 89 break; 90 } 91 92 for (;;) 93 { 94 unsigned char digit; 95 if (pszStr[0] == '\0') 96 { 97 if (!iDigit) 98 return defaultVal; 99 break; 100 } 101 102 digit = pszStr[0] - '0'; 103 if (digit > 9) 104 return defaultVal; 105 106 result *= 10; 107 result += digit; 108 ++iDigit; 109 110 ++pszStr; 111 } 112 113 return !neg ? result : -result; 58 114 } 59 115 … … 155 211 156 212 env = crGetenv( "CR_SERVER_DEFAULT_RENDER_TYPE" ); 157 if (env != NULL )158 { 159 GLubyte redir = (env[0] - 0x30);160 if (redir <= CR_SERVER_REDIR_ MAXVAL)213 if (env != NULL && env[0] != '\0') 214 { 215 unsigned int redir = (unsigned int)crServerVBoxParseNumerics(env, CR_SERVER_REDIR_F_NONE); 216 if (redir <= CR_SERVER_REDIR_F_ALL) 161 217 { 162 218 int rc = crServerSetOffscreenRenderingMode(redir); … … 168 224 } 169 225 #if defined(RT_OS_DARWIN) || defined(RT_OS_WINDOWS) || defined(GLX) 170 else 171 { 172 int rc = crServerSetOffscreenRenderingMode(CR_SERVER_REDIR_FBO_BLT); 226 if (cr_server.fPresentMode == CR_SERVER_REDIR_F_NONE) 227 { 228 /* the CR_SERVER_REDIR_F_FBO_BLT is set only if parent window is received, which means we are not in headles */ 229 int rc = crServerSetOffscreenRenderingMode(CR_SERVER_REDIR_F_FBO | CR_SERVER_REDIR_F_DISPLAY); 173 230 if (!RT_SUCCESS(rc)) 174 231 crWarning("offscreen rendering unsupported, no offscreen rendering will be used.."); … … 176 233 } 177 234 #endif 178 cr_server. bOffscreenRenderingDefault = cr_server.bForceOffscreenRendering;235 cr_server.fPresentModeDefault = cr_server.fPresentMode; 179 236 180 237 /* Need to do this as early as possible */ … … 297 354 298 355 env = crGetenv( "CR_SERVER_DEFAULT_RENDER_TYPE" ); 299 if (env != NULL )300 { 301 GLubyte redir = (env[0] - 0x30);302 if (redir <= CR_SERVER_REDIR_ MAXVAL)356 if (env != NULL && env[0] != '\0') 357 { 358 unsigned int redir = (unsigned int)crServerVBoxParseNumerics(env, CR_SERVER_REDIR_F_NONE); 359 if (redir <= CR_SERVER_REDIR_F_ALL) 303 360 { 304 361 int rc = crServerSetOffscreenRenderingMode(redir); 305 362 if (!RT_SUCCESS(rc)) 306 363 crWarning("offscreen rendering unsupported, no offscreen rendering will be used.."); 307 364 } 308 365 else … … 310 367 } 311 368 #if defined(RT_OS_DARWIN) || defined(RT_OS_WINDOWS) || defined(GLX) 312 else 313 { 314 int rc = crServerSetOffscreenRenderingMode(CR_SERVER_REDIR_FBO_BLT); 369 if (cr_server.fPresentMode == CR_SERVER_REDIR_F_NONE) 370 { 371 /* the CR_SERVER_REDIR_F_FBO_BLT is set only if parent window is received, which means we are not in headles */ 372 int rc = crServerSetOffscreenRenderingMode(CR_SERVER_REDIR_F_FBO | CR_SERVER_REDIR_F_DISPLAY); 315 373 if (!RT_SUCCESS(rc)) 316 374 crWarning("offscreen rendering unsupported, no offscreen rendering will be used.."); … … 318 376 } 319 377 #endif 320 cr_server. bOffscreenRenderingDefault = cr_server.bForceOffscreenRendering;378 cr_server.fPresentModeDefault = cr_server.fPresentMode; 321 379 322 380 cr_server.head_spu->dispatch_table.GetChromiumParametervCR(GL_WINDOW_POSITION_CR, 0, GL_INT, 2, &dims[0]);
Note:
See TracChangeset
for help on using the changeset viewer.