xpra icon
Bug tracker and wiki

Ticket #1577: vgl-30bpc-minimal.patch

File vgl-30bpc-minimal.patch, 4.2 KB (added by Antoine Martin, 3 years ago)

minimal patch

  • include/fbx.h

    diff --git a/include/fbx.h b/include/fbx.h
    index c3a64256..994b3117 100644
    a b typedef struct 
    5555
    5656
    5757/* Pixel formats */
    58 #define FBX_FORMATS 7
    59 enum { FBX_RGB, FBX_RGBA, FBX_BGR, FBX_BGRA, FBX_ABGR, FBX_ARGB, FBX_INDEX };
     58#define FBX_FORMATS 8
     59enum { FBX_RGB, FBX_RGBA, FBX_BGR, FBX_BGRA, FBX_ABGR, FBX_ARGB, FBX_r210, FBX_INDEX };
    6060
    6161static const int fbx_ps[FBX_FORMATS]=
    62         { 3, 4, 3, 4, 4, 4, 1 };
     62        { 3, 4, 3, 4, 4, 4, 4, 1 };
    6363static const int fbx_bgr[FBX_FORMATS]=
    64         { 0, 0, 1, 1, 1, 0, 0 };
     64        { 0, 0, 1, 1, 1, 0, 0, 0 };
    6565static const int fbx_alphafirst[FBX_FORMATS]=
    66         { 0, 0, 0, 0, 1, 1, 0 };
     66        { 0, 0, 0, 0, 1, 1, 0, 0 };
    6767static const int fbx_roffset[FBX_FORMATS]=
    68         { 0, 0, 2, 2, 3, 1, 0 };
     68        { 0, 0, 2, 2, 3, 1, 0, 0 };
    6969static const int fbx_goffset[FBX_FORMATS]=
    70         { 1, 1, 1, 1, 2, 2, 0 };
     70        { 1, 1, 1, 1, 2, 2, 1, 0 };
    7171static const int fbx_boffset[FBX_FORMATS]=
    72         { 2, 2, 0, 0, 1, 3, 0 };
     72        { 2, 2, 0, 0, 1, 3, 2, 0 };
    7373
    7474
    7575typedef struct _fbx_struct
  • server/VirtualDrawable.cpp

    diff --git a/server/VirtualDrawable.cpp b/server/VirtualDrawable.cpp
    index 2604440f..58955ed3 100644
    a b void VirtualDrawable::OGLDrawable::setVisAttribs(void) 
    118118{
    119119        if(glxvisual::visAttrib3D(config, GLX_STEREO))
    120120                stereo=true;
    121         int pixelsize=glxvisual::visAttrib3D(config, GLX_RED_SIZE)
     121        int pixelsize_noalpha=glxvisual::visAttrib3D(config, GLX_RED_SIZE)
    122122                +glxvisual::visAttrib3D(config, GLX_GREEN_SIZE)
    123                 +glxvisual::visAttrib3D(config, GLX_BLUE_SIZE)
     123                +glxvisual::visAttrib3D(config, GLX_BLUE_SIZE);
     124        int pixelsize=pixelsize_noalpha
    124125                +glxvisual::visAttrib3D(config, GLX_ALPHA_SIZE);
    125126
    126         if(pixelsize==32)
     127        if(pixelsize_noalpha==30)
     128        {
     129                format=GL_RGB10_A2;
     130        }
     131        else if(pixelsize==32)
    127132        {
    128133                #ifdef GL_BGRA_EXT
    129134                if(littleendian()) format=GL_BGRA_EXT;
    static const char *formatString(int format) 
    319324                #endif
    320325                case GL_RED:  case GL_GREEN:  case GL_BLUE:
    321326                        return "COMPONENT";
     327                case GL_RGB10_A2:
     328                        return "r210";
    322329                default:
    323330                        return "????";
    324331        }
    void VirtualDrawable::readPixels(GLint x, GLint y, GLint width, GLint pitch, 
    433440        while(e!=GL_NO_ERROR) e=_glGetError();  // Clear previous error
    434441        profReadback.startFrame();
    435442        if(usePBO) t0=getTime();
    436         _glReadPixels(x, y, width, height, format, GL_UNSIGNED_BYTE,
     443        int type = GL_UNSIGNED_BYTE;
     444        if(oglDraw->getFormat()==GL_RGB10_A2) {
     445                type = GL_UNSIGNED_INT_2_10_10_10_REV;
     446        }
     447        _glReadPixels(x, y, width, height, format, type,
    437448                usePBO? NULL:bits);
    438449
    439450        if(usePBO)
  • server/faker-glx.cpp

    diff --git a/server/faker-glx.cpp b/server/faker-glx.cpp
    index d5b27ffe..bf8a6984 100644
    a b static VisualID matchVisual(Display *dpy, GLXFBConfig config) 
    187187                                glxvisual::visAttrib3D(config, GLX_STEREO), 0);
    188188                // Failing that, we try to find a 24-bit TrueColor mono visual.
    189189                if(!vid)
    190                         vid=glxvisual::matchVisual2D(dpy, screen, 24, TrueColor, 0, 0, 0);
     190                       vid=glxvisual::matchVisual2D(dpy, screen, 24, TrueColor, 0, 0, 0);
    191191        }
    192192        if(vid) cfghash.add(dpy, config, vid);
    193193        return vid;
    XVisualInfo *glXChooseVisual(Display *dpy, int screen, int *attrib_list) 
    437437        if(vtemp)
    438438        {
    439439                if(vtemp->depth==32) depth=32;
     440                if(vtemp->depth==30) depth=30;
    440441                XFree(vtemp);
    441442        }
    442443
  • util/fbx.c

    diff --git a/util/fbx.c b/util/fbx.c
    index 2aed8e59..92b7935c 100644
    a b static int errorLine=-1; 
    2828static FILE *warningFile=NULL;
    2929
    3030static const int fbx_rmask[FBX_FORMATS]=
    31         { 0x0000FF, 0x0000FF, 0xFF0000, 0xFF0000, 0x0000FF, 0xFF0000, 0 };
     31        { 0x0000FF, 0x0000FF, 0xFF0000, 0xFF0000, 0x0000FF, 0xFF0000, 0x3FF00000, 0 };
    3232static const int fbx_gmask[FBX_FORMATS]=
    33         { 0x00FF00, 0x00FF00, 0x00FF00, 0x00FF00, 0x00FF00, 0x00FF00, 0 };
     33        { 0x00FF00, 0x00FF00, 0x00FF00, 0x00FF00, 0x00FF00, 0x00FF00, 0x000ffc00, 0 };
    3434static const int fbx_bmask[FBX_FORMATS]=
    35         { 0xFF0000, 0xFF0000, 0x0000FF, 0x0000FF, 0xFF0000, 0x0000FF, 0 };
     35        { 0xFF0000, 0xFF0000, 0x0000FF, 0x0000FF, 0xFF0000, 0x0000FF, 0x000003ff, 0 };
    3636static const char *formatName[FBX_FORMATS]=
    37         { "RGB", "RGBA", "BGR", "BGRA", "ABGR", "ARGB", "INDEX" };
     37        { "RGB", "RGBA", "BGR", "BGRA", "ABGR", "ARGB", "r210", "INDEX" };
    3838
    3939
    4040#if defined(_WIN32)