[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