[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15580] branches/soc-2007-joeedh/source/ blender: Texture map evaluation support now pretty much works.

Joseph Eagar joeedh at gmail.com
Tue Jul 15 04:06:06 CEST 2008


Revision: 15580
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15580
Author:   joeedh
Date:     2008-07-15 04:06:05 +0200 (Tue, 15 Jul 2008)

Log Message:
-----------
Texture map evaluation support now pretty much works.

YAY!!!!!

finally!

There may be other things in this commit, not sure, been trying to get this to 
work for a long time.  with this working, a merge with trunk may finally
come to pass.  though I'll be moving in the next month, so who knows.

Modified Paths:
--------------
    branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h
    branches/soc-2007-joeedh/source/blender/blenkernel/BKE_tile.h
    branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_cache.c
    branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h
    branches/soc-2007-joeedh/source/blender/render/intern/source/convertblender.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/envmap.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/renderdatabase.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/shadbuf.c
    branches/soc-2007-joeedh/source/blender/render/intern/source/shadeoutput.c

Modified: branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h
===================================================================
--- branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h	2008-07-15 01:23:56 UTC (rev 15579)
+++ branches/soc-2007-joeedh/source/blender/blenkernel/BKE_dsm.h	2008-07-15 02:06:05 UTC (rev 15580)
@@ -105,6 +105,10 @@
 
 #define DSM_SAMPLEMERGE_LIMIT	(0x7FFFFFFF) //20000000
 
+#define DSM_LINEAR	0
+#define DSM_SOFT	0
+//#define DOQMCDEBUG
+
 /*little bit smaller memarena buffer size for the final diced
   32x32 tiles*/
 #define DSM_TILE_FINALMEMARENASIZE (1<<16)

Modified: branches/soc-2007-joeedh/source/blender/blenkernel/BKE_tile.h
===================================================================
--- branches/soc-2007-joeedh/source/blender/blenkernel/BKE_tile.h	2008-07-15 01:23:56 UTC (rev 15579)
+++ branches/soc-2007-joeedh/source/blender/blenkernel/BKE_tile.h	2008-07-15 02:06:05 UTC (rev 15580)
@@ -288,6 +288,6 @@
 
 /*a non-fatal warning assertion.  it just prints into the console.*/
 #define BASSERT(eval)	if (!(eval)) printf("\nassert \"%s\" in file:\n%s\n on line %d failed.\n\n", #eval, __FILE__, __LINE__)
-#define BASSERT(eval)
+//#define BASSERT(eval)
 
 #endif /* BKE_TILE_H */

Modified: branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_cache.c
===================================================================
--- branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_cache.c	2008-07-15 01:23:56 UTC (rev 15579)
+++ branches/soc-2007-joeedh/source/blender/blenkernel/intern/tcs_cache.c	2008-07-15 02:06:05 UTC (rev 15580)
@@ -176,19 +176,8 @@
 	TCS_Tile *tile;
 	int tx=0, ty=0;
 	
-	BASSERT(vbuf);
-	for (ty=0; ty<buf->getSizeY(buf)/buf->getTileSizeY(buf); ty++) {
-		for (tx=0; tx<buf->getSizeX(buf)/buf->getTileSizeX(buf); tx++) {
-			tile = buf->getTile(buf, tx, ty, 0);
-			if (!tile->pool) {
-				printf("tile lacks pool!\n");
-				continue;
-			}
-			BASSERT(tile);
-			if (tile->is_compressed && ! tile->is_written) BLI_remlink(&tile->pool->compressed_tiles, tile);
-			else if (tile->is_compressed == 0 && tile->is_written == 0) BLI_remlink(&tile->pool->tiles, tile);
-		}
-	}
+	BASSERT(buf);
+
 	buf->freeBuffer(buf);
 	MEM_freeN(buf);
 }

Modified: branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h
===================================================================
--- branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h	2008-07-15 01:23:56 UTC (rev 15579)
+++ branches/soc-2007-joeedh/source/blender/render/intern/include/render_types.h	2008-07-15 02:06:05 UTC (rev 15580)
@@ -232,8 +232,10 @@
 	float persmat[4][4];
 	float viewmat[4][4];
 	float winmat[4][4];
+	float viewmat_uncorrected[4][4];
 	float *jit, *weight;
 	float d, clipend, clipsta, pixsize, soft;
+	float spotsize;
 	int co[3];
 	int size, bias;
 	ListBase buffers;
@@ -416,8 +418,10 @@
 	float r, g, b, k;
 	float energy, haint;
 	int lay;
-	float spotsi,spotbl;
-	float vec[3];
+	
+	/*the cosine of the spot size angle*/
+	float spotsi;
+	float spotbl, vec[3];
 	float xsp, ysp, distkw, inpr;
 	float halokw, halo;
 	

Modified: branches/soc-2007-joeedh/source/blender/render/intern/source/convertblender.c
===================================================================
--- branches/soc-2007-joeedh/source/blender/render/intern/source/convertblender.c	2008-07-15 01:23:56 UTC (rev 15579)
+++ branches/soc-2007-joeedh/source/blender/render/intern/source/convertblender.c	2008-07-15 02:06:05 UTC (rev 15580)
@@ -3262,11 +3262,20 @@
 	MTC_Mat4Ortho(mat);
 	MTC_Mat4Invert(shb->winmat, mat);	/* winmat is temp */
 	
-	/* matrix: combination of inverse view and lampmat */
+	/* matrix: combination of inverse view and lampmat.  this is because
+	   the render scene is already transformed into camera space.*/
 	/* calculate again: the ortho-render has no correct viewinv */
 	MTC_Mat4Invert(viewinv, re->viewmat);
-	MTC_Mat4MulMat4(shb->viewmat, viewinv, shb->winmat);
 	
+	/*deep shadow maps don't need to compensate for render transform,
+	  as they retransform the scene itself.*/
+	//if (lar->buftype != LA_SHADBUF_DEEP) {
+		MTC_Mat4MulMat4(shb->viewmat, viewinv, shb->winmat);
+	//} else {
+		Mat4CpyMat4(shb->viewmat_uncorrected, shb->winmat);
+		//memcpy(shb->viewmat_uncorrected, shb->winmat, sizeof(float)*4*4);
+	//}
+
 	/* projection */
 	shb->d= lar->clipsta;
 	shb->clipend= lar->clipend;

Modified: branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c
===================================================================
--- branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c	2008-07-15 01:23:56 UTC (rev 15579)
+++ branches/soc-2007-joeedh/source/blender/render/intern/source/dsm.c	2008-07-15 02:06:05 UTC (rev 15580)
@@ -1,2496 +1,2750 @@
-/**
- * $Id: dsm.c 12209 2007-10-04 21:41:36Z joeedh $
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2007 by the Blender Foundation.
- * All rights reserved.  Copyright is specifically transferred to
- * the blender foundation by Joseph Eagar.
- *
- * Contributors: Joseph Eagar
-  *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include <math.h>
-#include <float.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <string.h>
-
-#include "BLI_arithb.h"
-#include "MTC_matrixops.h"
-#include "BLI_blenlib.h"
-#include "BLI_threads.h"
-#include "BLI_jitter.h"
-#include "BLI_memarena.h"
-
-#include "BKE_tile.h"
-#include "BKE_dsm.h"
-#include "BKE_bucketbuffer.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
-
-#include "DNA_material_types.h"
-#include "DNA_object_types.h"
-#include "DNA_lamp_types.h"
-#include "DNA_curve_types.h"
-
-#include "RE_render_ext.h"
-#include "RE_shader_ext.h"
-
-#include "gammaCorrectionTables.h"
-#include "pixelblending.h"
-#include "render_types.h"
-#include "renderpipeline.h"
-#include "renderdatabase.h"
-#include "rendercore.h"
-#include "shadbuf.h"
-#include "shading.h"
-#include "sss.h"
-#include "zbuf.h"
-#include "qmc.h"
-
-#include "MEM_guardedalloc.h"
-
-#include "BIF_space.h"
-#include "BIF_editview.h"
-
-#include "PIL_time.h"
-
-extern Render R;
-static TCS_TilePool *deepbuffer_pool = NULL;
-
-/* prototypes */
-struct _ClrEntry;
-void DSM_DoTile(Render *re1, float projmat[4][4], ShadBuf *shb, DSMTile *tile, 
-				DSMBuffer *dbuf, RE_BucketTile *btile, int threadnr);
-
-int zbuffer_dsm(Render *re, RenderPart *pa, float winmat[4][4], APixstr **lastbuf, 
-				APixstr **lastbufstrand, APixstr *APixbuf, APixstr *APixbufstrand, 
-				ListBase *apsmbase, unsigned int lay, ShadBuf *shb, 
-				RE_BucketTile *buckettile);
-
-static APixstr *addpsmainA(ListBase *lb);
-static void freepsA(ListBase *lb);
-static APixstr *addpsA(ZSpan *zspan);
-
-/* Modified zbufclipwire from zbuf.c
-  v1 and v2 are in homogenous coordinates.  returns true if 
-  drawing should happen.  v1 and v2 are modified (clipped).*/
-int DSM_zbufclipwire(float clipsta, float clipend, int rectx, int recty, float *v1, float *v2);
-
-#define DSM_NONE			0
-#define DSM_FACE			1
-#define DSM_FACE_STEP		2
-#define DSM_STRAND			3
-#define DSM_STRAND_STEP		4
-
-/*internal structures*/
-typedef struct _ClrEntry {
-	struct _ClrEntry *next, *prev;
-	ListBase *srclist;
-	int depth;
-	int p;
-	int mask;
-	int obi;
-	int type;
-	int samplenr;
-	float value;
-	int index; /* color component index */
-} _ClrEntry;
-
-void DSM_MakeTilePool(int maxbytes)
-{
-	deepbuffer_pool = TCS_MakePool(maxbytes, "dsm");
-}
-
-void DSM_FreeTilePool(void)
-{
-	if (deepbuffer_pool) TCS_FreePool(deepbuffer_pool);
-	deepbuffer_pool = NULL;
-}
-
-/*doesn't actually free the DSMBuffer struct, only direct data*/
-void DSM_FreeBuffer(DSMBuffer *dbuf)
-{
-	int i;
-
-	for (i=0; i<dbuf->tilex*dbuf->tiley; i++) {
-		TCS_FreeTile(&dbuf->vfunc_rect[i]);
-		if (dbuf->vfunc_rect[i].arena) BLI_memarena_free(dbuf->vfunc_rect[i].arena);
-		if (dbuf->vfunc_rect[i].funcarray) MEM_freeN(dbuf->vfunc_rect[i].funcarray);
-	}
-	MEM_freeN(dbuf->vfunc_rect);
-}
-
-typedef struct DeepThreadTile {
-	struct DeepThreadTile *next, *prev;
-	DSMTile *tile;
-	int ready, assigned;
-} DeepThreadTile;
-
-typedef struct DeepThreadData {
-	ListBase *tiles;
-	int threadnr;
-	DSMBuffer *dbuf;
-	float *projmat;
-	RE_BucketBuffer *bucketbuf;
-	Render *re;
-	ShadBuf *shb;
-} DeepThreadData;
-
-void *do_dsmshadow_thread(void *vdata)
-{
-	DeepThreadData *data = vdata;
-	DeepThreadTile *tilet;
-	RE_BucketTile *buckettile;
-	DSMTile *tile;
-	int i;
-
-	for (tilet=data->tiles->first; tilet; tilet=tilet->next) {
-		if (data->re->test_break()) break;
-		if (tilet->assigned) continue;
-
-		BLI_lock_thread(LOCK_CUSTOM1);
-		if (tilet->assigned==0) {
-			tilet->assigned = 1;
-			BLI_unlock_thread(LOCK_CUSTOM1);
-			
-			tile = tilet->tile;
-			
-			tile->funcarray_len = tile->funcarray_buffer = 0;
-
-			tile->arena = BLI_memarena_new(DSM_TILE_MEMARENASIZE); /*FIXMEGREP: tweak this to find optimal value.*/
-			BLI_memarena_use_mapalloc(tile->arena);
-			tile->r_rect = BLI_memarena_alloc(tile->arena, sizeof(short)*tile->sizex*tile->sizey);
-			tile->g_rect = BLI_memarena_alloc(tile->arena, sizeof(short)*tile->sizex*tile->sizey);
-			tile->b_rect = BLI_memarena_alloc(tile->arena, sizeof(short)*tile->sizex*tile->sizey);
-			
-			/*set all the pixels in each *_rect to -1,
-			  signafying that there's no data here.*/
-			for (i=0; i<tile->sizex*tile->sizey; i++) {
-				tile->r_rect[i] = tile->g_rect[i] = tile->b_rect[i] = -1;
-			}
-
-			printf("Rendering a dsm shadow tile! Tile %d of %d\n", tile->y*data->dbuf->tilex+tile->x, data->dbuf->tilex*data->dbuf->tiley);
-			memset(data->dbuf->lastbuf[data->threadnr], 0, sizeof(void*)*tile->sizex*tile->sizey);
-			memset(data->dbuf->lastbufstrand[data->threadnr], 0, sizeof(void*)*tile->sizex*tile->sizey);
-

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list