Get the latest Blender, older versions, or experimental builds.
Stay up-to-date with the new features in the latest Blender releases.
Access production assets and knowledge from the open movies.
Documentation on the usage and features in Blender.
Latest development updates, by Blender developers.
Guidelines, release notes and development docs.
A platform to collect and share results of the Blender Benchmark.
The yearly event that brings the community together.
Support core development with a monthly contribution.
Perform a single donation with more payment options available.
/** \file BL_Material.h
* \ingroup ketsji
*/
#ifndef __BL_MATERIAL_H__
#define __BL_MATERIAL_H__
#include "STR_String.h"
#include "MT_Point2.h"
#include "DNA_meshdata_types.h"
#ifdef WITH_CXX_GUARDEDALLOC
#include "MEM_guardedalloc.h"
#endif
// --
struct MTex;
struct Material;
struct Image;
struct MTFace;
struct EnvMap;
/** max units
* this will default to users available units
* to build with more available, just increment this value
* although the more you add the slower the search time will be.
* we will go for eight, which should be enough
#define MAXTEX 8 //match in RAS_TexVert & RAS_OpenGLRasterizer
// different mapping modes
class BL_Mapping
{
public:
int mapping;
float scale[3];
float offsets[3];
int projplane[3];
STR_String objconame;
STR_String uvCoName;
};
// base material struct
class BL_Material
private:
int num_users;
bool share;
// -----------------------------------
BL_Material();
void Initialize();
int IdMode;
unsigned int ras_mode;
bool glslmat;
STR_String texname[MAXTEX];
unsigned int flag[MAXTEX];
int tile,tilexrep[MAXTEX],tileyrep[MAXTEX];
STR_String matname;
STR_String mtexname[MAXTEX];
int materialindex;
float matcolor[4];
float speccolor[3];
short alphablend, pad;
float hard, spec_f;
float alpha, emit, color_blend[MAXTEX], ref;
float amb;
int blend_mode[MAXTEX];
int num_enabled;
BL_Mapping mapping[MAXTEX];
STR_String imageId[MAXTEX];
Material* material;
MTexPoly mtexpoly; /* copy of the derived meshes tface */
Image* img[MAXTEX];
EnvMap* cubemap[MAXTEX];
unsigned int rgb[4];
void SetSharedMaterial(bool v);
bool IsShared();
void SetUsers(int num);
MEM_CXX_CLASS_ALLOC_FUNCS("GE:BL_Material")
// BL_Material::IdMode
enum BL_IdMode {
DEFAULT_BLENDER=-1,
TEXFACE,
ONETEX,
TWOTEX,
GREATERTHAN2
// BL_Material::blend_mode[index]
enum BL_BlendMode
BLEND_MIX=1,
BLEND_ADD,
BLEND_SUB,
BLEND_MUL,
BLEND_SCR
// -------------------------------------
// BL_Material::flag[index]
enum BL_flag
MIPMAP=1, // set to use mipmaps
CALCALPHA=2, // additive
USEALPHA=4, // use actual alpha channel
TEXALPHA=8, // use alpha combiner functions
TEXNEG=16, // negate blending
/*HASIPO=32,*/ // unused, commeted for now.
USENEGALPHA=64
// BL_Material::ras_mode
enum BL_ras_mode
// POLY_VIS=1,
COLLIDER=2,
ZSORT=4,
ALPHA=8,
// TRIANGLE=16,
USE_LIGHT=32,
WIRE=64,
CAST_SHADOW=128,
TEX=256,
TWOSIDED=512,
ONLY_SHADOW=1024,
// BL_Material::mapping[index]::mapping
enum BL_MappingFlag
USEENV =1,
USEREFL =2,
USEOBJ =4,
USENORM =8,
USEORCO =16,
USEUV =32,
USETANG =64,
DISABLE =128,
USECUSTOMUV=256
// BL_Material::BL_Mapping::projplane
enum BL_MappingProj
PROJN=0,
PROJX,
PROJY,
PROJZ
// ------------------------------------
//extern void initBL_Material(BL_Material* mat);
extern MTex* getMTexFromMaterial(Material *mat, int index);