X-Git-Url: https://git.jsancho.org/?p=c-irrlicht.git;a=blobdiff_plain;f=include%2FSMaterial.h;fp=include%2FSMaterial.h;h=a26eb69f3841733a072fea6d6dbb72e45dd35fe1;hp=5a27f34ccd858de021899d8cb6f1c2ec3e97cd92;hb=75c3ceb26453f2b265c3eabdd7518d26abfeed1c;hpb=9794edd155faec29e41294c55dece45a116a3b8c diff --git a/include/SMaterial.h b/include/SMaterial.h index 5a27f34..a26eb69 100644 --- a/include/SMaterial.h +++ b/include/SMaterial.h @@ -22,12 +22,140 @@ #ifndef __C_IRR_S_MATERIAL_H_INCLUDED__ #define __C_IRR_S_MATERIAL_H_INCLUDED__ +#include +#include #include +#include "EMaterialTypes.h" +#include "irrMath.h" +#include "SColor.h" +#include "SMaterialLayer.h" + +#define MATERIAL_MAX_TEXTURES _IRR_MATERIAL_MAX_TEXTURES_ + +typedef enum + { + irr_video_EBO_NONE = 0, + irr_video_EBO_ADD, + irr_video_EBO_SUBTRACT, + irr_video_EBO_REVSUBTRACT, + irr_video_EBO_MIN, + irr_video_EBO_MAX, + irr_video_EBO_MIN_FACTOR, + irr_video_EBO_MAX_FACTOR, + irr_video_EBO_MIN_ALPHA, + irr_video_EBO_MAX_ALPHA + } irr_video_E_BLEND_OPERATION; + +typedef enum + { + irr_video_ECFN_NEVER = 0, + irr_video_ECFN_LESSEQUAL = 1, + irr_video_ECFN_EQUAL = 2, + irr_video_ECFN_LESS, + irr_video_ECFN_NOTEQUAL, + irr_video_ECFN_GREATEREQUAL, + irr_video_ECFN_GREATER, + irr_video_ECFN_ALWAYS + } irr_video_E_COMPARISON_FUNC; + +typedef enum + { + irr_video_ECP_NONE = 0, + irr_video_ECP_ALPHA = 1, + irr_video_ECP_RED = 2, + irr_video_ECP_GREEN = 4, + irr_video_ECP_BLUE = 8, + irr_video_ECP_RGB = 14, + irr_video_ECP_ALL = 15 + } irr_video_E_COLOR_PLANE; + +typedef enum + { + irr_video_EAAM_OFF = 0, + irr_video_EAAM_SIMPLE = 1, + irr_video_EAAM_QUALITY = 3, + irr_video_EAAM_LINE_SMOOTH = 4, + irr_video_EAAM_POINT_SMOOTH = 8, + irr_video_EAAM_FULL_BASIC = 15, + irr_video_EAAM_ALPHA_TO_COVERAGE = 16 + } irr_video_E_ANTI_ALIASING_MODE; + +typedef enum + { + irr_video_ECM_NONE = 0, + irr_video_ECM_DIFFUSE, + irr_video_ECM_AMBIENT, + irr_video_ECM_EMISSIVE, + irr_video_ECM_SPECULAR, + irr_video_ECM_DIFFUSE_AND_AMBIENT + } irr_video_E_COLOR_MATERIAL; + +typedef enum + { + irr_video_EPO_BACK = 0, + irr_video_EPO_FRONT = 1 + } irr_video_E_POLYGON_OFFSET; + typedef struct { - bool wireframe; - bool lighting; + irr_video_SMaterialLayer textureLayer[MATERIAL_MAX_TEXTURES]; + irr_video_E_MATERIAL_TYPE materialType; + irr_video_SColor ambientColor; + irr_video_SColor diffuseColor; + irr_video_SColor emissiveColor; + irr_video_SColor specularColor; + float_t shininess; + float_t materialTypeParam; + float_t materialTypeParam2; + float_t thickness; + uint8_t zBuffer; + uint8_t antiAliasing; + uint8_t colorMask:4; + uint8_t colorMaterial:3; + irr_video_E_BLEND_OPERATION blendOperation:4; + uint8_t polygonOffsetFactor:3; + irr_video_E_POLYGON_OFFSET polygonOffsetDirection:1; + bool wireframe:1; + bool pointCloud:1; + bool gouraudShading:1; + bool lighting:1; + bool zWriteEnable:1; + bool backfaceCulling:1; + bool frontfaceCulling:1; + bool fogEnable:1; + bool normalizeNormals:1; + bool useMipMaps:1; } irr_video_SMaterial; +#define S_MATERIAL_DEFAULT \ +{ \ + .materialType = irr_video_EMT_SOLID, \ + .ambientColor = {255, 255, 255, 255}, \ + .diffuseColor = {255, 255, 255, 255}, \ + .emissiveColor = {0, 0, 0, 0}, \ + .specularColor = {255, 255, 255, 255}, \ + .shininess = 0, \ + .materialTypeParam = 0, \ + .materialTypeParam2 = 0, \ + .thickness = 1, \ + .zBuffer = irr_video_ECFN_LESSEQUAL, \ + .antiAliasing = irr_video_EAAM_SIMPLE, \ + .colorMask = irr_video_ECP_ALL, \ + .colorMaterial = irr_video_ECM_DIFFUSE, \ + .blendOperation = irr_video_EBO_NONE, \ + .polygonOffsetFactor = 0, \ + .polygonOffsetDirection = irr_video_EPO_FRONT, \ + .wireframe = false, \ + .pointCloud = false, \ + .gouraudShading = true, \ + .lighting = true, \ + .zWriteEnable = true, \ + .backfaceCulling = true, \ + .frontfaceCulling = false, \ + .fogEnable = false, \ + .normalizeNormals = false, \ + .useMipMaps = true \ +} + #endif