17 #ifndef INC_StdMeshMaterial
18 #define INC_StdMeshMaterial
110 std::vector<std::pair<StdCopyStrBuf, StdMeshMaterialShaderParameter> >
NamedParameters;
143 Filename(filename), Name(name), Language(language), Code(code)
189 std::vector<StdCopyStrBuf> ParameterNames;
283 struct {
float X;
float Y; } Scroll;
284 struct {
float XSpeed;
float YSpeed; } ScrollAnim;
286 struct {
float RevsPerSec; } RotateAnim;
288 struct {
float M[16]; } Transform;
289 struct {
XFormType XForm;
WaveType Wave;
float Base;
float Frequency;
float Phase;
float Amplitude; } WaveXForm;
367 std::vector<TexPtr> Textures;
521 typedef std::map<StdCopyStrBuf, StdMeshMaterial>
MaterialMap;
533 Iterator(
const MaterialMap::iterator& iter): iter_(iter) {}
544 MaterialMap::iterator iter_;
576 typedef std::map<StdCopyStrBuf, std::unique_ptr<StdMeshMaterialShader>> ShaderMap;
577 ShaderMap FragmentShaders;
578 ShaderMap VertexShaders;
579 ShaderMap GeometryShaders;
582 typedef std::map<std::tuple<const StdMeshMaterialShader*, const StdMeshMaterialShader*, const StdMeshMaterialShader*>, std::unique_ptr<StdMeshMaterialProgram> > ProgramMap;
C4MaterialMap MaterialMap
int32_t Angle(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2, int32_t iPrec)
StdMeshMaterialShaderType
StdMeshMatManager MeshMaterialManager
void Rotate(MatrixType &mat, float angle, float x, float y, float z)
void Scale(MatrixType &mat, float sx, float sy, float sz)
Iterator(const MaterialMap::iterator &iter)
bool operator==(const Iterator &other) const
bool operator!=(const Iterator &other) const
Iterator operator=(const Iterator &iter)
const StdMeshMaterial & operator*() const
const StdMeshMaterial * operator->() const
Iterator(const Iterator &iter)=default
void Remove(const StdStrBuf &name, class StdMeshMaterialUpdate *update)
const StdMeshMaterialShader * GetGeometryShader(const char *name) const
std::set< StdCopyStrBuf > Parse(const char *mat_script, const char *filename, StdMeshMaterialLoader &loader)
const StdMeshMaterialShader * GetVertexShader(const char *name) const
const StdMeshMaterialProgram * AddProgram(const char *name, StdMeshMaterialLoader &loader, const StdMeshMaterialPass::ShaderInstance &fragment_shader, const StdMeshMaterialPass::ShaderInstance &vertex_shader, const StdMeshMaterialPass::ShaderInstance &geometry_shader)
const StdMeshMaterial * GetMaterial(const char *material_name) const
const StdMeshMaterialShader * GetFragmentShader(const char *name) const
const StdMeshMaterialShader * AddShader(const char *filename, const char *name, const char *language, StdMeshMaterialShaderType type, const char *text, uint32_t load_flags)
const char * what() const override
StdMeshMaterialError(const StdStrBuf &message, const char *file, unsigned int line)
~StdMeshMaterialError() override=default
void Load(StdMeshMaterialParserCtx &ctx)
std::vector< StdMeshMaterialTechnique > Techniques
virtual ~StdMeshMaterialLoader()=default
virtual void AddShaderSlices(C4Shader &shader, int ssc)=0
virtual StdStrBuf LoadShaderCode(const char *filename)=0
virtual C4Surface * LoadTexture(const char *filename)=0
const StdMeshMaterialProgram *const Program
ProgramInstance(const StdMeshMaterialProgram *program, const ShaderInstance *fragment_instance, const ShaderInstance *vertex_instance, const ShaderInstance *geometry_instance)
std::vector< ParameterRef > Parameters
const StdMeshMaterialShaderParameter * Parameter
const StdMeshMaterialShader * Shader
void Load(StdMeshMaterialParserCtx &ctx)
DepthFunctionType AlphaRejectionFunction
SceneBlendType SceneBlendFactors[2]
std::shared_ptr< ProgramInstance > Program
CullHardwareType CullHardware
StdMeshMaterialShaderParameters Parameters
ShaderInstance GeometryShader
ShaderInstance FragmentShader
std::vector< StdMeshMaterialTextureUnit > TextureUnits
ShaderInstance VertexShader
float AlphaRejectionValue
StdMeshMaterialProgram(const char *name, const StdMeshMaterialShader *fragment_shader, const StdMeshMaterialShader *vertex_shader, const StdMeshMaterialShader *geometry_shader)
const C4Shader * GetShader(int ssc) const
bool Compile(StdMeshMaterialLoader &loader)
bool AddParameterNames(const StdMeshMaterialShaderParameters ¶meters)
int GetParameterIndex(const char *name) const
const StdMeshMaterialShader * GetVertexShader() const
const StdMeshMaterialShader * GetFragmentShader() const
const StdMeshMaterialShader * GetGeometryShader() const
StdMeshMaterialShader(const char *filename, const char *name, const char *language, StdMeshMaterialShaderType, const char *code)
const char * GetCode() const
const char * GetFilename() const
StdMeshMaterialShaderParameter()
StdMeshMaterialShaderParameter & operator=(const StdMeshMaterialShaderParameter &other)
const float * GetMatrix() const
~StdMeshMaterialShaderParameter()
const float * GetFloatv() const
StdMeshMaterialShaderParameter & AddParameter(const char *name, StdMeshMaterialShaderParameter::Type type)
StdMeshMaterialShaderParameters()
std::vector< std::pair< StdCopyStrBuf, StdMeshMaterialShaderParameter > > NamedParameters
void Load(StdMeshMaterialParserCtx &ctx)
StdMeshMaterialTechnique()
std::vector< StdMeshMaterialPass > Passes
void Load(StdMeshMaterialParserCtx &ctx)
TexPtr(C4Surface *Surface)
TexPtr & operator=(const TexPtr &other)
float ColorOpManualColor2[3]
BlendOpSourceType ColorOpSources[2]
float AlphaOpManualFactor
float AlphaOpManualAlpha1
const C4TexRef & GetTexture(unsigned int i) const
void LoadTexture(StdMeshMaterialParserCtx &ctx, const char *texname)
float ColorOpManualFactor
float AlphaOpManualAlpha2
size_t GetNumTextures() const
TexAddressModeType TexAddressMode
float ColorOpManualColor1[3]
FilteringType Filtering[3]
StdMeshMaterialTextureUnit()
bool HasFrameAnimation() const
BlendOpSourceType AlphaOpSources[2]
void Load(StdMeshMaterialParserCtx &ctx)
std::vector< Transformation > Transformations
bool HasTexCoordAnimation() const
const char * getData() const
double GetScrollX(double t) const
double GetRotate(double t) const
double GetScrollY(double t) const
double GetWaveXForm(double t) const