On Wed, 3 Jul 2002, Dean S. Messing wrote:

>  :: 
>  ::    NVIDIA's drivers do not support separate X-screens on a single
>  :: card.  NVIDIA's drivers use TwinView to display two monitors
>  :: on a single card, not Xinerama.  NVIDIA's drivers do advertise
>  :: the Xinerama protocol so that Xinerama-aware window managers
>  :: can get individual head info when in TwinView.  From the client's
>  :: point of view there is no difference between Xinerama info returned
>  :: from NVIDIA's TwinView driver and from a driver that was really
>  :: using Xinerama.
>  :: 
>  ::                         Mark.
> 
> Thanks Mark.  I'm a little surprised at this since most people buying
> a "dual-head" card would expect native xinerama to work, especially
> given the advanced binary drivers from the manufacturer.

   The only difference between Xinerama and TwinView from the client's
point of view is that TwinView works with OpenGL - Xinerama does not.
There is no advantage to using Xinerama on a dual-head card, but
many disadvantages.  Xinerama is the ass-backwards method of doing
single logical screen on a single-framebuffer dual-head card.

> 
> Be that as it may, I will accept that I'm getting "everything"
> transmitted to KDE that I would if I were running "pure" xinerama.
> 

   I've attached an app that will print out what Xinerama reports.

Eg:

Version 1.1
ErrorBase = 0, EventBase = 0
Xinerama is active
2 screens
0) 1600 x 1200 @ (0, 0)
1) 1600 x 1200 @ (1600, 0)


                        Mark.

/*
   gcc -o xinatest -Wall xinatest.c -L/usr/X11R6/lib -lXext -lXinerama -lX11 
*/

#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xinerama.h>
#include <stdio.h>
#include <stdlib.h>


int main ()
{
    Display *dpy;
    int i, event, error, major, minor, num;
    XineramaScreenInfo *info;

    dpy = XOpenDisplay("\0");

    XineramaQueryExtension(dpy, &event, &error);
    XineramaQueryVersion(dpy, &major, &minor);

    printf("Version %i.%i\n", major, minor);
    printf("ErrorBase = %i, EventBase = %i\n", error, event);

    printf("Xinerama %s active\n", XineramaIsActive(dpy) ? "is" : "is not");

    if((info = XineramaQueryScreens(dpy, &num))) {
        printf("%i screens\n", num);

        for(i = 0; i < num; i++) {
           printf("%i) %i x %i @ (%i, %i)\n", info[i].screen_number,
                                              info[i].width,
                                              info[i].height,
                                              info[i].x_org,
                                              info[i].y_org);
        }

       XFree(info); 
    }

    XCloseDisplay(dpy);

    return 0;
}

Reply via email to