Changeset View
Changeset View
Standalone View
Standalone View
framebuffers/xcb/xcb_framebuffer.cpp
Show First 20 Lines • Show All 375 Lines • ▼ Show 20 Line(s) | 348 | void XCBFrameBuffer::getServerFormat(rfbPixelFormat &format) { | |||
---|---|---|---|---|---|
376 | format.bitsPerPixel = d->framebufferImage->bpp; | 376 | format.bitsPerPixel = d->framebufferImage->bpp; | ||
377 | format.depth = d->framebufferImage->depth; | 377 | format.depth = d->framebufferImage->depth; | ||
378 | format.trueColour = true; // not using color palettes | 378 | format.trueColour = true; // not using color palettes | ||
379 | format.bigEndian = false; // always false for ZPIXMAP format! | 379 | format.bigEndian = false; // always false for ZPIXMAP format! | ||
380 | 380 | | |||
381 | // information about pixels layout | 381 | // information about pixels layout | ||
382 | 382 | | |||
383 | if (root_visualtype) { | 383 | if (root_visualtype) { | ||
384 | uint16_t pixelmaxValue = (1 << root_visualtype->bits_per_rgb_value) - 1; | | |||
385 | | ||||
386 | #ifdef _DEBUG | 384 | #ifdef _DEBUG | ||
387 | qDebug("xcb framebuffer: Got info about root visual:\n" | 385 | qDebug("xcb framebuffer: Got info about root visual:\n" | ||
388 | " bits per rgb value: %d\n" | 386 | " bits per rgb value: %d\n" | ||
389 | " red mask: %08x\n" | 387 | " red mask: %08x\n" | ||
390 | " green mask: %08x\n" | 388 | " green mask: %08x\n" | ||
391 | " blue mask: %08x\n" | 389 | " blue mask: %08x\n", | ||
392 | " pixelMaxValue = %d\n", | | |||
393 | (int)root_visualtype->bits_per_rgb_value, | 390 | (int)root_visualtype->bits_per_rgb_value, | ||
394 | root_visualtype->red_mask, | 391 | root_visualtype->red_mask, | ||
395 | root_visualtype->green_mask, | 392 | root_visualtype->green_mask, | ||
396 | root_visualtype->blue_mask, | 393 | root_visualtype->blue_mask); | ||
397 | (int)pixelmaxValue); | | |||
398 | #endif | 394 | #endif | ||
399 | 395 | | |||
400 | // calculate shifts | 396 | // calculate shifts | ||
401 | format.redShift = 0; | 397 | format.redShift = 0; | ||
402 | format.redMax = pixelmaxValue; | | |||
403 | if (root_visualtype->red_mask) { | 398 | if (root_visualtype->red_mask) { | ||
404 | while (!(root_visualtype->red_mask & (1 << format.redShift))) { | 399 | while (!(root_visualtype->red_mask & (1 << format.redShift))) { | ||
405 | format.redShift++; | 400 | format.redShift++; | ||
406 | } | 401 | } | ||
407 | } | 402 | } | ||
408 | format.greenShift = 0; | 403 | format.greenShift = 0; | ||
409 | format.greenMax = pixelmaxValue; | | |||
410 | if (root_visualtype->green_mask) { | 404 | if (root_visualtype->green_mask) { | ||
411 | while (!(root_visualtype->green_mask & (1 << format.greenShift))) { | 405 | while (!(root_visualtype->green_mask & (1 << format.greenShift))) { | ||
412 | format.greenShift++; | 406 | format.greenShift++; | ||
413 | } | 407 | } | ||
414 | } | 408 | } | ||
415 | format.blueShift = 0; | 409 | format.blueShift = 0; | ||
416 | format.blueMax = pixelmaxValue; | | |||
417 | if (root_visualtype->blue_mask) { | 410 | if (root_visualtype->blue_mask) { | ||
418 | while (!(root_visualtype->blue_mask & (1 << format.blueShift))) { | 411 | while (!(root_visualtype->blue_mask & (1 << format.blueShift))) { | ||
419 | format.blueShift++; | 412 | format.blueShift++; | ||
420 | } | 413 | } | ||
421 | } | 414 | } | ||
422 | 415 | | |||
416 | // calculate pixel max value. | ||||
417 | // NOTE: bits_per_rgb_value is unreliable, thus should be avoided. | ||||
418 | format.redMax = root_visualtype->red_mask >> format.redShift; | ||||
419 | format.greenMax = root_visualtype->green_mask >> format.greenShift; | ||||
420 | format.blueMax = root_visualtype->blue_mask >> format.blueShift; | ||||
421 | | ||||
423 | #ifdef _DEBUG | 422 | #ifdef _DEBUG | ||
424 | qDebug() << " Calculated redShift =" << (int)format.redShift; | 423 | qDebug() << " Calculated redShift =" << (int)format.redShift; | ||
425 | qDebug() << " Calculated greenShift =" << (int)format.greenShift; | 424 | qDebug() << " Calculated greenShift =" << (int)format.greenShift; | ||
426 | qDebug() << " Calculated blueShift =" << (int)format.blueShift; | 425 | qDebug() << " Calculated blueShift =" << (int)format.blueShift; | ||
426 | qDebug( " Calculated max values: R%d G%d B%d", | ||||
427 | format.redMax, format.greenMax, format.blueMax); | ||||
427 | #endif | 428 | #endif | ||
428 | } else { | 429 | } else { | ||
429 | // some kind of fallback (unlikely code execution will go this way) | 430 | // some kind of fallback (unlikely code execution will go this way) | ||
430 | // idea taken from qt framefuffer sources | 431 | // idea taken from qt framefuffer sources | ||
431 | if (format.bitsPerPixel == 8) { | 432 | if (format.bitsPerPixel == 8) { | ||
432 | format.redShift = 0; | 433 | format.redShift = 0; | ||
433 | format.greenShift = 3; | 434 | format.greenShift = 3; | ||
434 | format.blueShift = 6; | 435 | format.blueShift = 6; | ||
▲ Show 20 Lines • Show All 250 Lines • Show Last 20 Lines |