123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #ifndef __CCSPRIT3DMATERIAL_H__
- #define __CCSPRIT3DMATERIAL_H__
- #include <string>
- #include <unordered_map>
- #include "base/ccTypes.h"
- #include "renderer/CCMaterial.h"
- #include "3d/CCBundle3DData.h"
- NS_CC_BEGIN
- class Texture2D;
- class CC_DLL Sprite3DMaterial : public Material
- {
- public:
-
- enum class MaterialType
- {
-
- UNLIT,
- UNLIT_NOTEX,
- VERTEX_LIT,
- DIFFUSE,
- DIFFUSE_NOTEX,
- BUMPED_DIFFUSE,
-
-
- CUSTOM,
- };
-
-
- MaterialType getMaterialType() const { return _type; }
-
-
- static Sprite3DMaterial* createBuiltInMaterial(MaterialType type, bool skinned);
-
-
- static Sprite3DMaterial* createWithFilename(const std::string& path);
-
-
- static Sprite3DMaterial* createWithGLStateProgram(GLProgramState* programState);
-
- void setTexture(Texture2D* tex, NTextureData::Usage usage);
-
-
- static void createBuiltInMaterial();
-
-
- static void releaseBuiltInMaterial();
-
-
- static void releaseCachedMaterial();
-
-
- virtual Material* clone() const override;
-
- protected:
-
- MaterialType _type;
- static std::unordered_map<std::string, Sprite3DMaterial*> _materials;
- static Sprite3DMaterial* _unLitMaterial;
- static Sprite3DMaterial* _unLitNoTexMaterial;
- static Sprite3DMaterial* _vertexLitMaterial;
- static Sprite3DMaterial* _diffuseMaterial;
- static Sprite3DMaterial* _diffuseNoTexMaterial;
- static Sprite3DMaterial* _bumpedDiffuseMaterial;
-
- static Sprite3DMaterial* _unLitMaterialSkin;
- static Sprite3DMaterial* _vertexLitMaterialSkin;
- static Sprite3DMaterial* _diffuseMaterialSkin;
- static Sprite3DMaterial* _bumpedDiffuseMaterialSkin;
- };
- class Sprite3DMaterialCache
- {
- public:
-
- static Sprite3DMaterialCache* getInstance();
-
- static void destroyInstance();
-
-
- bool addSprite3DMaterial(const std::string& key, Texture2D* tex);
-
-
- Texture2D* getSprite3DMaterial(const std::string& key);
-
-
- void removeAllSprite3DMaterial();
-
- void removeUnusedSprite3DMaterial();
-
- CC_CONSTRUCTOR_ACCESS:
-
- Sprite3DMaterialCache();
- ~Sprite3DMaterialCache();
-
- protected:
- static Sprite3DMaterialCache* _cacheInstance;
- std::unordered_map<std::string, Texture2D*> _materials;
-
- };
- NS_CC_END
- #endif
|