Revision: 18535
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18535
Author:   nicholasbishop
Date:     2009-01-16 02:56:11 +0100 (Fri, 16 Jan 2009)

Log Message:
-----------
Added a view3d function to read cached depth buffer, before was in sculpt.c 
where it didn't belong.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
    branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c
    
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h      
2009-01-16 01:19:08 UTC (rev 18534)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h      
2009-01-16 01:56:11 UTC (rev 18535)
@@ -61,6 +61,8 @@
 
 /* Projection */
 
+float read_cached_depth(struct ViewContext *vc, int x, int y);
+
 void project_short(struct ARegion *ar, struct View3D *v3d, float *vec, short 
*adr);
 void project_short_noclip(struct ARegion *ar, struct View3D *v3d, float *vec, 
short *adr);
 

Modified: branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c  
2009-01-16 01:19:08 UTC (rev 18534)
+++ branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c  
2009-01-16 01:56:11 UTC (rev 18535)
@@ -145,6 +145,8 @@
 
        int first_time; /* Beginning of stroke may do some things special */
 
+       ViewContext vc;
+
        /* Mesh data can either come directly from a Mesh, or from a MultiresDM 
*/
        int multires; /* Special handling for multires meshes */
        MVert *mvert;
@@ -234,32 +236,6 @@
  * Simple functions to get data from the GL
  */
 
-/* Uses window coordinates (x,y) to find the depth in the GL depth buffer. If
-   available, G.vd->depths is used so that the brush doesn't sculpt on top of
-   itself (G.vd->depths is only updated at the end of a brush stroke.) */
-static float get_depth(bContext *C, short x, short y)
-{
-       ScrArea *sa= CTX_wm_area(C);
-
-       if(sa->spacetype==SPACE_VIEW3D) { // should check this in context 
instead?
-               ViewDepths *vd = ((View3D*)sa->spacedata.first)->depths;
-               
-               y -= CTX_wm_region(C)->winrct.ymin;
-
-               if(vd && vd->depths && x > 0 && y > 0 && x < vd->w && y < vd->h)
-                       return vd->depths[y * vd->w + x];
-
-               if(!vd)
-                       fprintf(stderr, "Error: Bad view3d!\n");
-               else if(!vd->depths)
-                       fprintf(stderr, "Error: Bad depths copy!\n");
-               else
-                       fprintf(stderr, "Error: Out of range: (%d,%d)\n", x, y);
-       }
-
-       return 1;
-}
-
 /* Uses window coordinates (x,y) and depth component z to find a point in
    modelspace */
 static void unproject(SculptSession *ss, float out[3], const short x, const 
short y, const float z)
@@ -1692,7 +1668,7 @@
        SculptData *sd = &CTX_data_scene(C)->sculptdata;
        Object *ob= CTX_data_active_object(C);
        ModifierData *md;
-       float depth = get_depth(C, event->x, event->y);
+       ViewContext vc;
        float scale[3], clip_tolerance[3] = {0,0,0};
        int mouse[2], flag = 0;
 
@@ -1724,9 +1700,11 @@
        RNA_int_set_array(op->ptr, "initial_mouse", mouse);
 
        /* Initial screen depth under the mouse */
-       RNA_float_set(op->ptr, "depth", depth);
+       view3d_set_viewcontext(C, &vc);
+       RNA_float_set(op->ptr, "depth", read_cached_depth(&vc, event->x, 
event->y));
 
        sculpt_update_cache_invariants(sd, op, ob);
+       sd->session->cache->vc = vc;
 }
 
 static int sculpt_brush_stroke_invoke(bContext *C, wmOperator *op, wmEvent 
*event)
@@ -1776,7 +1754,8 @@
        float center[3];
        int mouse[2] = {event->x, event->y};
 
-       unproject(sd->session, center, event->x, event->y, get_depth(C, 
event->x, event->y));
+       unproject(sd->session, center, event->x, event->y,
+                 read_cached_depth(&sd->session->cache->vc, event->x, 
event->y));
 
        /* Add to stroke */
        RNA_collection_add(op->ptr, "stroke", &itemptr);

Modified: 
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c   
    2009-01-16 01:19:08 UTC (rev 18534)
+++ 
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c   
    2009-01-16 01:56:11 UTC (rev 18535)
@@ -497,6 +497,18 @@
        vec[2]= (v3d->persinv[0][2]*dx + v3d->persinv[1][2]*dy);
 }
 
+float read_cached_depth(ViewContext *vc, int x, int y)
+{
+       ViewDepths *vd = vc->v3d->depths;
+               
+       y -= vc->ar->winrct.ymin;
+
+       if(vd && vd->depths && x > 0 && y > 0 && x < vd->w && y < vd->h)
+               return vd->depths[y * vd->w + x];
+       else
+               return 1;
+}
+
 void view3d_get_object_project_mat(View3D *v3d, Object *ob, float pmat[4][4], 
float vmat[4][4])
 {
        Mat4MulMat4(vmat, ob->obmat, v3d->viewmat);


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to