X11-GLX

 view release on metacpan or  search on metacpan

t/70-compositor.t  view on Meta::CPAN

my $client= $x->connection;
plan skip_all => 'Xcomposite not supported by server'
    unless $client->XCompositeQueryVersion;

my $ext= glXQueryExtensionsString($client);
plan skip_all => 'GLX_EXT_texture_from_pixmap not supported by server'
	unless $ext =~ /GLX_EXT_texture_from_pixmap/;

sub err(&) { my $code= shift; my $ret; { local $@= ''; eval { $code->() }; $client->flush_sync; $ret= $@; } $ret }

my ($root, $overlay, $region);
note "local Xc ver = ".X11::Xlib::XCompositeVersion." server Xc ver = ".join('.', $client->XCompositeQueryVersion);
is( err{ $root= $client->root_window }, '', 'get root window' );
note "root = ".$root->summarize;
is( err{ $client->XCompositeRedirectSubwindows($root, CompositeRedirectAutomatic) }, '', 'XCompositeRedirectSubwindows' );
is( err{ $root->event_mask_include(SubstructureNotifyMask) }, '', 'listen SubstructureNotifyMask' );
is( err{ $overlay= $client->XCompositeGetOverlayWindow($root) }, '', 'XCompositeGetOverlayWindow' );
note "overlay = ".$overlay->summarize;

#sub nullify_window_region
{
	my $rgn= $client->XFixesCreateRegion([ { x => 100, y => 100, width => 150, height => 150 } ]);
	$overlay->set_bounding_region($rgn);
	$overlay->set_input_region($rgn);
}

my @glx_fbconfig= (
	GLX_RENDER_TYPE, GLX_RGBA_BIT,
	GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT,
	GLX_DOUBLEBUFFER, 1,
	GLX_RED_SIZE, 8,
	GLX_GREEN_SIZE, 8,
	GLX_BLUE_SIZE, 8,
	GLX_ALPHA_SIZE, 8,
	GLX_DEPTH_SIZE, 16,
);
my $dwim= X11::GLX::DWIM->new(
	display => $client,
	fbconfig => \@glx_fbconfig,
	target => { window => { x => 290, y => 90, width => 32, height => 32, parent => $overlay } },
	gl_projection => {}
);
#$client->XReparentWindow($dwim->target, $overlay, 0, 0);
$dwim->target->event_mask_include(ExposureMask);
$dwim->target->set_bounding_region();
#$dwim->target->show;

my $client2;
if ($ENV{TEST_APP}) {
	local $ENV{DISPLAY}= $x->display_string;
	open $client2, '-|', "$ENV{TEST_APP} 2>&1" or die "open pipe from '$ENV{TEST_APP}': $!";
} else {
	note "client2 connecting to ".$x->display_string;

t/70-compositor.t  view on Meta::CPAN

}

my $r= 0;
my $start= time;
while (time - $start < 10) {
	my $e= $client->wait_event(timeout => 1);
	if ($e) {
		note 'event '.$e->summarize;
		if ($e->type == CreateNotify) {
			my $w= $client->get_cached_window($e->window);
			next if $w == $overlay;
			note "Window created: ".$w->summarize.sprintf(' (%X)', $w->xid);
		}
		elsif ($e->type == MapNotify) {
			my $w= $client->get_cached_window($e->window);
			next if $w == $overlay;
			note "Window mapped: ".$w->summarize.sprintf(' (%X)', $w->xid);
			$w->event_mask_include(ExposureMask);
		}
	} else {
		note int(time - $start);
		glClearColor(.5, 1, .5, .5);
	glClearDepth(1);
	glColor4d(1,1,1,1);
	glDepthFunc(GL_LEQUAL);
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);



( run in 0.711 second using v1.01-cache-2.11-cpan-65fba6d93b7 )