[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34653] trunk/blender/source/blender/ render/intern/source: Renamed texture.c in render module, to prevent debuggers to

Ton Roosendaal ton at blender.org
Sat Feb 5 14:10:21 CET 2011


Revision: 34653
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34653
Author:   ton
Date:     2011-02-05 13:10:20 +0000 (Sat, 05 Feb 2011)
Log Message:
-----------
Renamed texture.c in render module, to prevent debuggers to
complain about the same named file in blenkernel.

Added Paths:
-----------
    trunk/blender/source/blender/render/intern/source/render_texture.c

Removed Paths:
-------------
    trunk/blender/source/blender/render/intern/source/texture.c

Copied: trunk/blender/source/blender/render/intern/source/render_texture.c (from rev 34652, trunk/blender/source/blender/render/intern/source/texture.c)
===================================================================
--- trunk/blender/source/blender/render/intern/source/render_texture.c	                        (rev 0)
+++ trunk/blender/source/blender/render/intern/source/render_texture.c	2011-02-05 13:10:20 UTC (rev 34653)
@@ -0,0 +1,3390 @@
+/*
+ * $Id$
+ *
+ * ***** 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * Contributor(s): 2004-2006, Blender Foundation, full recode
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_rand.h"
+#include "BLI_utildefines.h"
+
+#include "DNA_texture_types.h"
+#include "DNA_object_types.h"
+#include "DNA_lamp_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_material_types.h"
+#include "DNA_image_types.h"
+#include "DNA_node_types.h"
+
+#include "IMB_imbuf_types.h"
+#include "IMB_imbuf.h"
+
+#include "BKE_colortools.h"
+#include "BKE_image.h"
+#include "BKE_node.h"
+#include "BKE_plugin_types.h"
+
+
+#include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_material.h"
+
+#include "BKE_library.h"
+#include "BKE_image.h"
+#include "BKE_texture.h"
+#include "BKE_key.h"
+#include "BKE_ipo.h"
+
+#include "envmap.h"
+#include "pointdensity.h"
+#include "voxeldata.h"
+#include "renderpipeline.h"
+#include "render_types.h"
+#include "rendercore.h"
+#include "shading.h"
+#include "texture.h"
+
+#include "renderdatabase.h" /* needed for UV */
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+/* defined in pipeline.c, is hardcopy of active dynamic allocated Render */
+/* only to be used here in this file, it's for speed */
+extern struct Render R;
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+
+
+
+void init_render_texture(Render *re, Tex *tex)
+{
+	int cfra= re->scene->r.cfra;
+	
+	if(re) cfra= re->r.cfra;
+	
+	/* imap test */
+	if(tex->ima && ELEM(tex->ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) {
+		BKE_image_user_calc_frame(&tex->iuser, cfra, re?re->flag & R_SEC_FIELD:0);
+	}
+	
+	if(tex->type==TEX_PLUGIN) {
+		if(tex->plugin && tex->plugin->doit) {
+			if(tex->plugin->cfra) {
+				*(tex->plugin->cfra)= (float)cfra; //BKE_curframe(re->scene); // XXX old animsys - timing stuff to be fixed 
+			}
+		}
+	}
+	else if(tex->type==TEX_ENVMAP) {
+		/* just in case */
+		tex->imaflag |= TEX_INTERPOL | TEX_MIPMAP;
+		tex->extend= TEX_CLIP;
+		
+		if(tex->env) {
+			if(tex->env->type==ENV_PLANE)
+				tex->extend= TEX_EXTEND;
+			
+			/* only free envmap when rendermode was set to render envmaps, for previewrender */
+			if(G.rendering && re) {
+				if (re->r.mode & R_ENVMAP)
+					if(tex->env->stype==ENV_ANIM) 
+						BKE_free_envmapdata(tex->env);
+			}
+		}
+	}
+	
+	if(tex->nodetree && tex->use_nodes) {
+		ntreeBeginExecTree(tex->nodetree); /* has internal flag to detect it only does it once */
+	}
+}
+
+/* ------------------------------------------------------------------------- */
+
+void init_render_textures(Render *re)
+{
+	Tex *tex;
+	
+	tex= re->main->tex.first;
+	while(tex) {
+		if(tex->id.us) init_render_texture(re, tex);
+		tex= tex->id.next;
+	}
+}
+
+void end_render_texture(Tex *tex)
+{
+	if(tex && tex->use_nodes && tex->nodetree)
+		ntreeEndExecTree(tex->nodetree);
+}
+
+void end_render_textures(Render *re)
+{
+	Tex *tex;
+	for(tex= re->main->tex.first; tex; tex= tex->id.next)
+		if(tex->id.us)
+			end_render_texture(tex);
+}
+
+/* ------------------------------------------------------------------------- */
+
+
+/* this allows colorbanded textures to control normals as well */
+static void tex_normal_derivate(Tex *tex, TexResult *texres)
+{
+	if (tex->flag & TEX_COLORBAND) {
+		float col[4];
+		if (do_colorband(tex->coba, texres->tin, col)) {
+			float fac0, fac1, fac2, fac3;
+			
+			fac0= (col[0]+col[1]+col[2]);
+			do_colorband(tex->coba, texres->nor[0], col);
+			fac1= (col[0]+col[1]+col[2]);
+			do_colorband(tex->coba, texres->nor[1], col);
+			fac2= (col[0]+col[1]+col[2]);
+			do_colorband(tex->coba, texres->nor[2], col);
+			fac3= (col[0]+col[1]+col[2]);
+			
+			texres->nor[0]= 0.3333*(fac0 - fac1);
+			texres->nor[1]= 0.3333*(fac0 - fac2);
+			texres->nor[2]= 0.3333*(fac0 - fac3);
+			
+			return;
+		}
+	}
+	texres->nor[0]= texres->tin - texres->nor[0];
+	texres->nor[1]= texres->tin - texres->nor[1];
+	texres->nor[2]= texres->tin - texres->nor[2];
+}
+
+
+
+static int blend(Tex *tex, float *texvec, TexResult *texres)
+{
+	float x, y, t;
+
+	if(tex->flag & TEX_FLIPBLEND) {
+		x= texvec[1];
+		y= texvec[0];
+	}
+	else {
+		x= texvec[0];
+		y= texvec[1];
+	}
+
+	if(tex->stype==TEX_LIN) {	/* lin */
+		texres->tin= (1.0+x)/2.0;
+	}
+	else if(tex->stype==TEX_QUAD) {	/* quad */
+		texres->tin= (1.0+x)/2.0;
+		if(texres->tin<0.0) texres->tin= 0.0;
+		else texres->tin*= texres->tin;
+	}
+	else if(tex->stype==TEX_EASE) {	/* ease */
+		texres->tin= (1.0+x)/2.0;
+		if(texres->tin<=.0) texres->tin= 0.0;
+		else if(texres->tin>=1.0) texres->tin= 1.0;
+		else {
+			t= texres->tin*texres->tin;
+			texres->tin= (3.0*t-2.0*t*texres->tin);
+		}
+	}
+	else if(tex->stype==TEX_DIAG) { /* diag */
+		texres->tin= (2.0+x+y)/4.0;
+	}
+	else if(tex->stype==TEX_RAD) { /* radial */
+		texres->tin= (atan2(y,x) / (2*M_PI) + 0.5);
+	}
+	else {  /* sphere TEX_SPHERE */
+		texres->tin= 1.0-sqrt(x*x+	y*y+texvec[2]*texvec[2]);
+		if(texres->tin<0.0) texres->tin= 0.0;
+		if(tex->stype==TEX_HALO) texres->tin*= texres->tin;  /* halo */
+	}
+
+	BRICONT;
+
+	return TEX_INT;
+}
+
+/* ------------------------------------------------------------------------- */
+/* ************************************************************************* */
+
+/* newnoise: all noisebased types now have different noisebases to choose from */
+
+static int clouds(Tex *tex, float *texvec, TexResult *texres)
+{
+	int rv = TEX_INT;
+	
+	texres->tin = BLI_gTurbulence(tex->noisesize, texvec[0], texvec[1], texvec[2], tex->noisedepth, (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
+
+	if (texres->nor!=NULL) {
+		// calculate bumpnormal
+		texres->nor[0] = BLI_gTurbulence(tex->noisesize, texvec[0] + tex->nabla, texvec[1], texvec[2], tex->noisedepth,  (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
+		texres->nor[1] = BLI_gTurbulence(tex->noisesize, texvec[0], texvec[1] + tex->nabla, texvec[2], tex->noisedepth,  (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
+		texres->nor[2] = BLI_gTurbulence(tex->noisesize, texvec[0], texvec[1], texvec[2] + tex->nabla, tex->noisedepth,  (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
+		
+		tex_normal_derivate(tex, texres);
+		rv |= TEX_NOR;
+	}
+
+	if (tex->stype==TEX_COLOR) {
+		// in this case, int. value should really be computed from color,
+		// and bumpnormal from that, would be too slow, looks ok as is
+		texres->tr = texres->tin;
+		texres->tg = BLI_gTurbulence(tex->noisesize, texvec[1], texvec[0], texvec[2], tex->noisedepth, (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
+		texres->tb = BLI_gTurbulence(tex->noisesize, texvec[1], texvec[2], texvec[0], tex->noisedepth, (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
+		BRICONTRGB;
+		texres->ta = 1.0;
+		return (rv | TEX_RGB);
+	}
+
+	BRICONT;
+
+	return rv;
+
+}
+
+/* creates a sine wave */
+static float tex_sin(float a)
+{
+	a = 0.5 + 0.5*sin(a);
+		
+	return a;
+}
+
+/* creates a saw wave */
+static float tex_saw(float a)
+{
+	const float b = 2*M_PI;
+	
+	int n = (int)(a / b);
+	a -= n*b;
+	if (a < 0) a += b;
+	return a / b;
+}
+
+/* creates a triangle wave */
+static float tex_tri(float a)
+{
+	const float b = 2*M_PI;
+	const float rmax = 1.0;
+	
+	a = rmax - 2.0*fabs(floor((a*(1.0/b))+0.5) - (a*(1.0/b)));
+	
+	return a;
+}
+
+/* computes basic wood intensity value at x,y,z */
+static float wood_int(Tex *tex, float x, float y, float z)
+{
+	float wi=0;						
+	short wf = tex->noisebasis2;	/* wave form:	TEX_SIN=0,  TEX_SAW=1,  TEX_TRI=2						 */
+	short wt = tex->stype;			/* wood type:	TEX_BAND=0, TEX_RING=1, TEX_BANDNOISE=2, TEX_RINGNOISE=3 */
+
+	float (*waveform[3])(float);	/* create array of pointers to waveform functions */
+	waveform[0] = tex_sin;			/* assign address of tex_sin() function to pointer array */
+	waveform[1] = tex_saw;
+	waveform[2] = tex_tri;
+	
+	if ((wf>TEX_TRI) || (wf<TEX_SIN)) wf=0; /* check to be sure noisebasis2 is initialized ahead of time */
+		
+	if (wt==TEX_BAND) {
+		wi = waveform[wf]((x + y + z)*10.0);
+	}
+	else if (wt==TEX_RING) {
+		wi = waveform[wf](sqrt(x*x + y*y + z*z)*20.0);
+	}
+	else if (wt==TEX_BANDNOISE) {
+		wi = tex->turbul*BLI_gNoise(tex->noisesize, x, y, z, (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
+		wi = waveform[wf]((x + y + z)*10.0 + wi);
+	}
+	else if (wt==TEX_RINGNOISE) {
+		wi = tex->turbul*BLI_gNoise(tex->noisesize, x, y, z, (tex->noisetype!=TEX_NOISESOFT), tex->noisebasis);
+		wi = waveform[wf](sqrt(x*x + y*y + z*z)*20.0 + wi);
+	}
+	
+	return wi;
+}
+
+static int wood(Tex *tex, float *texvec, TexResult *texres)
+{
+	int rv=TEX_INT;
+
+	texres->tin = wood_int(tex, texvec[0], texvec[1], texvec[2]);
+	if (texres->nor!=NULL) {
+		/* calculate bumpnormal */
+		texres->nor[0] = wood_int(tex, texvec[0] + tex->nabla, texvec[1], texvec[2]);
+		texres->nor[1] = wood_int(tex, texvec[0], texvec[1] + tex->nabla, texvec[2]);
+		texres->nor[2] = wood_int(tex, texvec[0], texvec[1], texvec[2] + tex->nabla);
+		
+		tex_normal_derivate(tex, texres);
+		rv |= TEX_NOR;
+	}
+
+	BRICONT;
+
+	return rv;
+}
+
+/* computes basic marble intensity at x,y,z */

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list