Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/makesdna/DNA_material_types.h2
-rw-r--r--source/blender/python/api2_2x/Material.c71
-rw-r--r--source/blender/python/api2_2x/doc/Material.py36
3 files changed, 36 insertions, 73 deletions
diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 5ef327502e1..451b8ba692f 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -157,6 +157,8 @@ typedef struct Material {
#define MA_TANGENT_STR 0x1000000
#define MA_SHADBUF 0x2000000
+#define MA_MODE_MASK 0x3ffffff /* all valid mode bits */
+
/* diff_shader */
#define MA_DIFF_LAMBERT 0
#define MA_DIFF_ORENNAYAR 1
diff --git a/source/blender/python/api2_2x/Material.c b/source/blender/python/api2_2x/Material.c
index e0fe70b54f8..b9f9937d1fd 100644
--- a/source/blender/python/api2_2x/Material.c
+++ b/source/blender/python/api2_2x/Material.c
@@ -324,6 +324,13 @@ static PyObject *Material_ModesDict( void )
PyConstant_Insert(c, "TRACEABLE", PyInt_FromLong(MA_TRACEBLE));
PyConstant_Insert(c, "SHADOW", PyInt_FromLong(MA_SHADOW));
+ PyConstant_Insert(c, "SHADOWBUF", PyInt_FromLong(MA_SHADBUF));
+ PyConstant_Insert(c, "TANGENTSTR", PyInt_FromLong(MA_TANGENT_STR));
+ PyConstant_Insert(c, "FULLOSA", PyInt_FromLong(MA_FULL_OSA));
+ PyConstant_Insert(c, "RAYBIAS", PyInt_FromLong(MA_RAYBIAS));
+ PyConstant_Insert(c, "TRANSPSHADOW", PyInt_FromLong(MA_SHADOW_TRA));
+ PyConstant_Insert(c, "RAMPCOL", PyInt_FromLong(MA_RAMP_COL));
+ PyConstant_Insert(c, "RAMPSPEC", PyInt_FromLong(MA_RAMP_SPEC));
PyConstant_Insert(c, "SHADELESS", PyInt_FromLong(MA_SHLESS));
PyConstant_Insert(c, "WIRE", PyInt_FromLong(MA_WIRE));
PyConstant_Insert(c, "VCOL_LIGHT", PyInt_FromLong(MA_VERTEXCOL));
@@ -1912,46 +1919,20 @@ static int Material_setName( BPy_Material * self, PyObject * value )
static int Material_setMode( BPy_Material * self, PyObject * value )
{
int param;
- int bitmask = MA_TRACEBLE
- | MA_SHADOW
- | MA_SHLESS
- | MA_WIRE
- | MA_VERTEXCOL
- | MA_VERTEXCOLP
- | MA_HALO
- | MA_ZTRA
- | MA_ZINV
- | MA_HALO_RINGS
- | MA_HALO_LINES
- | MA_ONLYSHADOW
- | MA_HALO_XALPHA
- | MA_STAR
- | MA_FACETEXTURE
- | MA_HALOTEX
- | MA_HALOPUNO
- | MA_NOMIST
- | MA_HALO_SHADE
- | MA_HALO_FLARE
- | MA_RADIO
- | MA_RAYMIRROR
- | MA_ZTRA
- | MA_RAYTRANSP
- | MA_ONLYSHADOW
- | MA_NOMIST
- | MA_ENV;
if( !PyInt_CheckExact ( value ) ) {
char errstr[128];
- sprintf ( errstr , "expected int bitmask of 0x%08x", bitmask );
+ sprintf ( errstr , "expected int bitmask of 0x%08x", MA_MODE_MASK );
return EXPP_ReturnIntError( PyExc_TypeError, errstr );
}
param = PyInt_AS_LONG ( value );
- if ( ( param & bitmask ) != param )
+ if ( ( param & MA_MODE_MASK ) != param )
return EXPP_ReturnIntError( PyExc_ValueError,
"invalid bit(s) set in mask" );
- self->material->mode = param;
+ self->material->mode &= ( MA_RAMP_COL | MA_RAMP_SPEC );
+ self->material->mode |= param & ~( MA_RAMP_COL | MA_RAMP_SPEC );
return 0;
}
@@ -2938,34 +2919,6 @@ static PyObject *Matr_oldsetMode( BPy_Material * self, PyObject * args )
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL
};
- static int bitmask = MA_TRACEBLE
- | MA_SHADOW
- | MA_SHLESS
- | MA_WIRE
- | MA_VERTEXCOL
- | MA_VERTEXCOLP
- | MA_HALO
- | MA_ZTRA
- | MA_ZINV
- | MA_HALO_RINGS
- | MA_HALO_LINES
- | MA_ONLYSHADOW
- | MA_HALO_XALPHA
- | MA_STAR
- | MA_FACETEXTURE
- | MA_HALOTEX
- | MA_HALOPUNO
- | MA_NOMIST
- | MA_HALO_SHADE
- | MA_HALO_FLARE
- | MA_RADIO
- | MA_RAYMIRROR
- | MA_ZTRA
- | MA_RAYTRANSP
- | MA_ONLYSHADOW
- | MA_NOMIST
- | MA_ENV;
-
/*
* check for a single integer argument; do a quick check for now
@@ -2975,7 +2928,7 @@ static PyObject *Matr_oldsetMode( BPy_Material * self, PyObject * args )
if ( (PySequence_Size( args ) == 1)
&& PyInt_Check ( PyTuple_GET_ITEM ( args , 0 ) )
&& PyArg_ParseTuple( args, "i", &flag )
- && (flag & bitmask) == flag ) {
+ && (flag & MA_MODE_MASK ) == flag ) {
ok = 1;
/*
diff --git a/source/blender/python/api2_2x/doc/Material.py b/source/blender/python/api2_2x/doc/Material.py
index 80d741d1d9f..d86d00cc5cf 100644
--- a/source/blender/python/api2_2x/doc/Material.py
+++ b/source/blender/python/api2_2x/doc/Material.py
@@ -25,8 +25,18 @@ Example::
@type Modes: readonly dictionary
@var Modes: The available Material Modes.
+
+ B{Note}: Some Modes are only available when the 'Halo' mode is I{off} and
+ others only when it is I{on}. But these two subsets of modes share the same
+ numerical values in their Blender C #defines. So, for example, if 'Halo' is
+ on, then 'NoMist' is actually interpreted as 'HaloShaded'. We marked all
+ such possibilities in the Modes dict below: each halo-related mode that
+ uses an already taken value is preceded by "+" and appear below the normal
+ mode which also uses that value.
+
- TRACEABLE - Make Material visible for shadow lamps.
- SHADOW - Enable Material for shadows.
+ - SHADOWBUF - Enable Material to cast shadows with shadow buffers.
- SHADELESS - Make Material insensitive to light or shadow.
- WIRE - Render only the edges of faces.
- VCOL_LIGHT - Add vertex colors as extra light.
@@ -34,28 +44,26 @@ Example::
- HALO - Render as a halo.
- ZTRANSP - Z-buffer transparent faces.
- ZINVERT - Render with inverted Z-buffer.
- - - HALORINGS - Render rings over the basic halo.
+ - + HALORINGS - Render rings over the basic halo.
- ENV - Do not render Material.
- - - HALOLINES - Render star shaped lines over the basic halo.
+ - + HALOLINES - Render star shaped lines over the basic halo.
- ONLYSHADOW - Let alpha be determined on the degree of shadow.
- - - HALOXALPHA - Use extreme alpha.
- - TEXFACE - UV-Editor assigned texture gives color and texture info
- for faces.
- - - HALOSTAR - Render halo as a star.
+ - + HALOXALPHA - Use extreme alpha.
+ - TEXFACE - UV-Editor assigned texture gives color and texture info for faces.
+ - + HALOSTAR - Render halo as a star.
- NOMIST - Set the Material insensitive to mist.
- - - HALOSHADED - Let halo receive light.
+ - + HALOSHADED - Let halo receive light.
- HALOTEX - Give halo a texture.
- HALOPUNO - Use the vertex normal to specify the dimension of the halo.
- HALOFLARE - Render halo as a lens flare.
- RAYMIRROR - Enables raytracing for mirror reflection rendering.
- RAYTRANSP - Enables raytracing for transparency rendering.
-@warn: Some Modes are only available when the 'Halo' mode is I{off} and
- others only when it is I{on}. But these two subsets of modes share the same
- numerical values in their Blender C #defines. So, for example, if 'Halo' is
- on, then 'NoMist' is actually interpreted as 'HaloShaded'. We marked all
- such possibilities in the Modes dict below: each halo-related mode that
- uses an already taken value is preceded by "-" and appear below the normal
- mode which also uses that value.
+ - RAYBIAS - Prevent ray traced shadow errors with Phong interpolated normals.
+ - RAMPCOL - Status of colorband ramp for Material's diffuse color. This is a read-only bit.
+ - RAMPSPEC - Status of colorband ramp for Material's specular color. This is a read-only bit.
+ - TANGENTSTR - Uses direction of strands as normal for tangent-shading.
+ - TRANSPSHADOW - Lets Material receive transparent shadows based on material color and alpha.
+ - FULLOSA - Force rendering of all OSA samples.
@type Shaders: readonly dictionary
@var Shaders: The available Material Shaders.