Explorar o código

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

David Rose %!s(int64=21) %!d(string=hai) anos
pai
achega
e05ac10e9d

+ 10 - 2
panda/src/display/displayRegion.cxx

@@ -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)) {

+ 2 - 2
panda/src/display/graphicsOutput.cxx

@@ -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:

+ 3 - 3
panda/src/framework/windowFramework.cxx

@@ -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;