forked from bartvdbraak/blender
83de5cb308
now do per material bucket.
189 lines
3.2 KiB
C++
189 lines
3.2 KiB
C++
|
|
/** \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 MTex;
|
|
struct Material;
|
|
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;
|
|
|
|
public:
|
|
// -----------------------------------
|
|
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;
|
|
MTFace tface; /* copy of the derived meshes tface */
|
|
Image* img[MAXTEX];
|
|
EnvMap* cubemap[MAXTEX];
|
|
unsigned int m_mcol; /* for text color (only) */
|
|
|
|
STR_String uvName;
|
|
STR_String uv2Name;
|
|
|
|
void SetUVLayerName(const STR_String &name);
|
|
void SetUVLayerName2(const STR_String &name);
|
|
|
|
void SetSharedMaterial(bool v);
|
|
bool IsShared();
|
|
void SetUsers(int num);
|
|
|
|
|
|
#ifdef WITH_CXX_GUARDEDALLOC
|
|
MEM_CXX_CLASS_ALLOC_FUNCS("GE:BL_Material")
|
|
#endif
|
|
};
|
|
|
|
// 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
|
|
};
|
|
|
|
// -------------------------------------
|
|
// 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* getImageFromMaterial(Material *mat, int index);
|
|
extern int getNumTexChannels( Material *mat );
|
|
// ------------------------------------
|
|
|
|
#endif
|
|
|
|
|