diff src/video/x11/SDL_x11render.c @ 4630:02895e9c796b

Added some comments.
author Sunny Sachanandani <sunnysachanandani@gmail.com>
date Mon, 02 Aug 2010 17:14:09 +0530
parents 44fd1f0b895a
children 066ce836b80e
line wrap: on
line diff
--- a/src/video/x11/SDL_x11render.c	Mon Aug 02 11:13:40 2010 +0530
+++ b/src/video/x11/SDL_x11render.c	Mon Aug 02 17:14:09 2010 +0530
@@ -1886,6 +1886,8 @@
         Picture src, mask;
         XRenderPictureAttributes attr;
         const SDL_Rect *mrect;
+        /* mrect is the rectangular area of the mask
+         * picture that is aligned with the source. */
 
         if (texture->modMode == SDL_TEXTUREMODULATE_NONE) {
             src = texturedata->picture;
@@ -1901,11 +1903,16 @@
         }
         else if (texture->blendMode == SDL_BLENDMODE_MOD)
         {
+            /* SDL_BLENDMODE_MOD requires a temporary buffer
+             * i.e. stencil_pict */
             mask = data->stencil_pict;
             mrect = dstrect;
         }
         else
         {
+            /* This trick allows on-the-fly multiplication
+             * of the src color channels with it's alpha
+             * channel. */
             mask = src;
             mrect = srcrect;
         }
@@ -1925,6 +1932,7 @@
                             mrect->x, mrect->y, dstrect->x, dstrect->y,
                             dstrect->w, dstrect->h);
         } else {
+            /* The transformation is from the dst to src picture. */
             double xscale = ((double) srcrect->w) / dstrect->w;
             double yscale = ((double) srcrect->h) / dstrect->h;
             XTransform xform = {{
@@ -1933,16 +1941,20 @@
                     {XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(xscale * yscale)}}};
             XRenderSetPictureTransform(data->display, src, &xform);
             
+            /* Black magic follows. */
             if (texture->blendMode == SDL_BLENDMODE_MOD) {
+                /* Copy the dst to a temp buffer. */
                 XRenderComposite(data->display, PictOpSrc, data->drawable_pict,
                              src, data->stencil_pict,
                              dstrect->x, dstrect->y, srcrect->x, srcrect->y,
                              dstrect->x, dstrect->y, dstrect->w, dstrect->h);
+                /* Set the compnent alpha flag on the temp buffer. */
                 attr.component_alpha = True;
                 XRenderChangePicture(data->display, data->stencil_pict,
                                      CPComponentAlpha, &attr);
             }
 
+            /* Set the picture filter only if a scaling mode is set. */
             if (texture->scaleMode != SDL_TEXTURESCALEMODE_NONE) {
                 XRenderSetPictureFilter(data->display, src,
                                         texturedata->filter, 0, 0);
@@ -1952,14 +1964,16 @@
                              src, mask, data->drawable_pict,
                              srcrect->x, srcrect->y, mrect->x, mrect->y,
                              dstrect->x, dstrect->y, dstrect->w, dstrect->h);
-            
+           /* Set the texture transformation back to the identity matrix. */ 
             XTransform identity = {{
                     {XDoubleToFixed(1), XDoubleToFixed(0), XDoubleToFixed(0)},
                     {XDoubleToFixed(0), XDoubleToFixed(1), XDoubleToFixed(0)},
                     {XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(1)}}};
             XRenderSetPictureTransform(data->display, src, &identity);
         }
-
+        
+        /* Reset the component alpha flag only when
+         * the blending mode is SDL_BLENDMODE_MOD. */
         if (renderer->blendMode == SDL_BLENDMODE_MOD) {
             attr.component_alpha = False;
             XRenderChangePicture(data->display, data->stencil_pict,