default background alpha should be 0; screenshot should preserve alpha if available

This commit is contained in:
David Rose 2005-01-28 23:45:06 +00:00
parent 517acbaccb
commit e05ac10e9d
3 changed files with 15 additions and 7 deletions

View File

@ -525,8 +525,16 @@ get_screenshot(PNMImage &image) {
window->make_current();
PixelBuffer p(x_size, y_size, 3, 1, PixelBuffer::T_unsigned_byte,
PixelBuffer::F_rgb);
int components = 3;
PixelBuffer::Format format = PixelBuffer::F_rgb;
if ((gsg->get_properties().get_frame_buffer_mode() & FrameBufferProperties::FM_alpha) != 0) {
components = 4;
format = PixelBuffer::F_rgba;
}
PixelBuffer p(x_size, y_size, components, 1, PixelBuffer::T_unsigned_byte,
format);
RenderBuffer buffer = gsg->get_render_buffer(get_screenshot_buffer_type());
if (!gsg->copy_pixel_buffer(&p, this, buffer)) {

View File

@ -82,7 +82,7 @@ GraphicsOutput(GraphicsPipe *pipe, GraphicsStateGuardian *gsg,
switch (background_color.get_num_words()) {
case 1:
set_clear_color(Colorf(background_color[0], background_color[0], background_color[0], 1.0f));
set_clear_color(Colorf(background_color[0], background_color[0], background_color[0], 0.0f));
break;
case 2:
@ -90,7 +90,7 @@ GraphicsOutput(GraphicsPipe *pipe, GraphicsStateGuardian *gsg,
break;
case 3:
set_clear_color(Colorf(background_color[0], background_color[1], background_color[2], 1.0f));
set_clear_color(Colorf(background_color[0], background_color[1], background_color[2], 0.0f));
break;
case 4:

View File

@ -881,21 +881,21 @@ set_background_type(WindowFramework::BackgroundType type) {
case BT_black:
_display_region_3d->set_clear_color_active(true);
_display_region_3d->set_clear_depth_active(true);
_display_region_3d->set_clear_color(Colorf(0.0f, 0.0f, 0.0f, 1.0f));
_display_region_3d->set_clear_color(Colorf(0.0f, 0.0f, 0.0f, 0.0f));
_display_region_3d->set_clear_depth(1.0f);
break;
case BT_gray:
_display_region_3d->set_clear_color_active(true);
_display_region_3d->set_clear_depth_active(true);
_display_region_3d->set_clear_color(Colorf(0.3f, 0.3f, 0.3f, 1.0f));
_display_region_3d->set_clear_color(Colorf(0.3f, 0.3f, 0.3f, 0.0f));
_display_region_3d->set_clear_depth(1.0f);
break;
case BT_white:
_display_region_3d->set_clear_color_active(true);
_display_region_3d->set_clear_depth_active(true);
_display_region_3d->set_clear_color(Colorf(1.0f, 1.0f, 1.0f, 1.0f));
_display_region_3d->set_clear_color(Colorf(1.0f, 1.0f, 1.0f, 0.0f));
_display_region_3d->set_clear_depth(1.0f);
break;