PDA

View Full Version : XRenderCreatePicture to OpenGL Texture



rom222
12-07-2005, 01:22 PM
Help!!!

What I'm trying to do is using Xcomposite to be capable to grab the display in the backbuffer of my desktop applications running, convert them into texture and then present them inside an OpenGL application. So far so good, however I can't figure it out how to convert the image that I got into memory to an OpenGL texture, check out the code below:


#include <GL/gl.h>
#include <GL/glu.h>
#include <stdio.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xrender.h>

int main(int argc, char ** argv)
{
Display *dpy = XOpenDisplay(":0.0");

bool hasNamePixmap = false;

int event_base, error_base;
if ( XCompositeQueryExtension( dpy, &amp;event_base, &amp;error_base ) )
{
int major = 0, minor = 2;
XCompositeQueryVersion( dpy, &amp;major, &amp;minor );
if ( major > 0 ?? minor >= 2 ) hasNamePixmap = true;
}

for ( int i = 0; i < ScreenCount( dpy ); i++ )
XCompositeRedirectSubwindows( dpy, RootWindow( dpy, i ), CompositeRedirectAutomatic );

XWindowAttributes attr;
Window wid = 0x2600001; // i.e
XGetWindowAttributes( dpy, wid, &amp;attr );

XRenderPictFormat *format = XRenderFindVisualFormat(dpy, attr.visual);
bool hasAlpha = ( format->type == PictTypeDirect &amp;&amp; format->direct.alphaMask );
int x = attr.x;
int y = attr.y;
int width = attr.width;
int height = attr.height;

printf("%d %d %d %d", attr.x, attr.y, attr.width, attr.height);

XRenderPictureAttributes pa;
pa.subwindow_mode = IncludeInferiors; // Don't clip child widgets

Picture picture = XRenderCreatePicture( dpy, wid, format, CPSubwindowMode, &amp;pa );

// How I can now take that picture in memory and then
// convert it to an OpenGL Texture????

glGenTextures(1, ????????);
}