VirtualBox

Ignore:
Timestamp:
Mar 29, 2013 2:57:24 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
84629
Message:

crOpenGL/VRDP: always show 3D window unles in Headles mode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_config.c

    r44951 r45248  
    5252
    5353    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;
    5656    cr_server.bUsePBOForReadback = GL_FALSE;
    5757    cr_server.bUseOutputRedirect = GL_FALSE;
     58}
     59
     60static 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;
    58114}
    59115
     
    155211
    156212    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)
    161217        {
    162218            int rc = crServerSetOffscreenRenderingMode(redir);
     
    168224    }
    169225#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);
    173230        if (!RT_SUCCESS(rc))
    174231            crWarning("offscreen rendering unsupported, no offscreen rendering will be used..");
     
    176233    }
    177234#endif
    178     cr_server.bOffscreenRenderingDefault = cr_server.bForceOffscreenRendering;
     235    cr_server.fPresentModeDefault = cr_server.fPresentMode;
    179236
    180237    /* Need to do this as early as possible */
     
    297354
    298355    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)
    303360        {
    304361            int rc = crServerSetOffscreenRenderingMode(redir);
    305362            if (!RT_SUCCESS(rc))
    306                             crWarning("offscreen rendering unsupported, no offscreen rendering will be used..");
     363                crWarning("offscreen rendering unsupported, no offscreen rendering will be used..");
    307364        }
    308365        else
     
    310367    }
    311368#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);
    315373        if (!RT_SUCCESS(rc))
    316374            crWarning("offscreen rendering unsupported, no offscreen rendering will be used..");
     
    318376    }
    319377#endif
    320     cr_server.bOffscreenRenderingDefault = cr_server.bForceOffscreenRendering;
     378    cr_server.fPresentModeDefault = cr_server.fPresentMode;
    321379
    322380    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.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette