[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35672] trunk/blender/source/blender: Bugfix #26549

Mitchell Stokes mogurijin at gmail.com
Mon Mar 21 20:26:21 CET 2011


 id_us_min(texn->env->ima) generates a warning and causes MSVC+CMake
to not build since warnings are treated as errors.
id_us_min((ID*)texn->env->ima) is fine though. If this is the right
change, than I can go ahead and commit it.

Cheers,
Mitchell

On Mon, Mar 21, 2011 at 10:10 AM, Ton Roosendaal <ton at blender.org> wrote:
> Revision: 35672
>          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35672
> Author:   ton
> Date:     2011-03-21 17:10:55 +0000 (Mon, 21 Mar 2011)
> Log Message:
> -----------
> Bugfix #26549
>
> Using environment map type "load" increased user counter on each
> preview render.
>
> Also noticed that this type of envmap use wasn't threadsafe, causing
> imbufs being allocated for all threads. Also fixed that.
>
> Modified Paths:
> --------------
>    trunk/blender/source/blender/blenkernel/intern/texture.c
>    trunk/blender/source/blender/render/intern/source/envmap.c
>
> Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/intern/texture.c    2011-03-21 16:46:26 UTC (rev 35671)
> +++ trunk/blender/source/blender/blenkernel/intern/texture.c    2011-03-21 17:10:55 UTC (rev 35672)
> @@ -788,7 +788,10 @@
>        }
>
>        if(texn->coba) texn->coba= MEM_dupallocN(texn->coba);
> -       if(texn->env) texn->env= BKE_copy_envmap(texn->env);
> +       if(texn->env) {
> +               texn->env= BKE_copy_envmap(texn->env);
> +               id_us_min(texn->env->ima);
> +       }
>        if(texn->pd) texn->pd= MEM_dupallocN(texn->pd);
>        if(texn->vd) {
>                texn->vd= MEM_dupallocN(texn->vd);
>
> Modified: trunk/blender/source/blender/render/intern/source/envmap.c
> ===================================================================
> --- trunk/blender/source/blender/render/intern/source/envmap.c  2011-03-21 16:46:26 UTC (rev 35671)
> +++ trunk/blender/source/blender/render/intern/source/envmap.c  2011-03-21 17:10:55 UTC (rev 35672)
> @@ -75,47 +75,54 @@
>  {
>        int dx, part;
>
> -       BKE_free_envmapdata(env);
> +       /* after lock we test cube[1], if set the other thread has done it fine */
> +       BLI_lock_thread(LOCK_IMAGE);
> +       if(env->cube[1]==NULL) {
> +
> +               BKE_free_envmapdata(env);
>
> -       dx= ibuf->y;
> -       dx/= 2;
> -       if (3*dx == ibuf->x) {
> -               env->type = ENV_CUBE;
> -       } else if (ibuf->x == ibuf->y) {
> -               env->type = ENV_PLANE;
> -       } else {
> -               printf("Incorrect envmap size\n");
> -               env->ok= 0;
> -               env->ima->ok= 0;
> -               return;
> -       }
> -
> -       if (env->type == ENV_CUBE) {
> -               for(part=0; part<6; part++) {
> -                       env->cube[part]= IMB_allocImBuf(dx, dx, 24, IB_rect|IB_rectfloat);
> +               dx= ibuf->y;
> +               dx/= 2;
> +               if (3*dx == ibuf->x) {
> +                       env->type = ENV_CUBE;
> +                       env->ok= ENV_OSA;
> +               } else if (ibuf->x == ibuf->y) {
> +                       env->type = ENV_PLANE;
> +                       env->ok= ENV_OSA;
> +               } else {
> +                       printf("Incorrect envmap size\n");
> +                       env->ok= 0;
> +                       env->ima->ok= 0;
>                }
> -               IMB_float_from_rect(ibuf);
>
> -               IMB_rectcpy(env->cube[0], ibuf,
> -                       0, 0, 0, 0, dx, dx);
> -               IMB_rectcpy(env->cube[1], ibuf,
> -                       0, 0, dx, 0, dx, dx);
> -               IMB_rectcpy(env->cube[2], ibuf,
> -                       0, 0, 2*dx, 0, dx, dx);
> -               IMB_rectcpy(env->cube[3], ibuf,
> -                       0, 0, 0, dx, dx, dx);
> -               IMB_rectcpy(env->cube[4], ibuf,
> -                       0, 0, dx, dx, dx, dx);
> -               IMB_rectcpy(env->cube[5], ibuf,
> -                       0, 0, 2*dx, dx, dx, dx);
> -               env->ok= ENV_OSA;
> -       }
> -       else { /* ENV_PLANE */
> -               env->cube[1]= IMB_dupImBuf(ibuf);
> -               IMB_float_from_rect(env->cube[1]);
> -
> -               env->ok= ENV_OSA;
> -       }
> +               if(env->ok) {
> +                       if (env->type == ENV_CUBE) {
> +                               for(part=0; part<6; part++) {
> +                                       env->cube[part]= IMB_allocImBuf(dx, dx, 24, IB_rect|IB_rectfloat);
> +                               }
> +                               IMB_float_from_rect(ibuf);
> +
> +                               IMB_rectcpy(env->cube[0], ibuf,
> +                                       0, 0, 0, 0, dx, dx);
> +                               IMB_rectcpy(env->cube[1], ibuf,
> +                                       0, 0, dx, 0, dx, dx);
> +                               IMB_rectcpy(env->cube[2], ibuf,
> +                                       0, 0, 2*dx, 0, dx, dx);
> +                               IMB_rectcpy(env->cube[3], ibuf,
> +                                       0, 0, 0, dx, dx, dx);
> +                               IMB_rectcpy(env->cube[4], ibuf,
> +                                       0, 0, dx, dx, dx, dx);
> +                               IMB_rectcpy(env->cube[5], ibuf,
> +                                       0, 0, 2*dx, dx, dx, dx);
> +
> +                       }
> +                       else { /* ENV_PLANE */
> +                               env->cube[1]= IMB_dupImBuf(ibuf);
> +                               IMB_float_from_rect(env->cube[1]);
> +                       }
> +               }
> +       }
> +       BLI_unlock_thread(LOCK_IMAGE);
>  }
>
>  /* ------------------------------------------------------------------------- */
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>


More information about the Bf-committers mailing list