123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- #ifndef __CCMESH_H__
- #define __CCMESH_H__
- #include <string>
- #include <map>
- #include "3d/CCBundle3DData.h"
- #include "3d/CCAABB.h"
- #include "base/CCRef.h"
- #include "math/CCMath.h"
- #include "renderer/CCMeshCommand.h"
- NS_CC_BEGIN
- class Texture2D;
- class MeshSkin;
- class MeshIndexData;
- class GLProgramState;
- class GLProgram;
- class Material;
- class Renderer;
- class Scene;
- class Pass;
- class CC_DLL Mesh : public Ref
- {
- friend class Sprite3D;
- public:
- typedef std::vector<unsigned short> IndexArray;
-
- static Mesh* create(const std::vector<float>& positions, const std::vector<float>& normals, const std::vector<float>& texs, const IndexArray& indices);
-
- CC_DEPRECATED_ATTRIBUTE static Mesh* create(const std::vector<float>& vertices, int perVertexSizeInFloat, const IndexArray& indices, int , const std::vector<MeshVertexAttrib>& attribs, int ){ return create(vertices, perVertexSizeInFloat, indices, attribs); }
-
-
- static Mesh* create(const std::vector<float>& vertices, int perVertexSizeInFloat, const IndexArray& indices, const std::vector<MeshVertexAttrib>& attribs);
-
-
- static Mesh* create(const std::string& name, MeshIndexData* indexData, MeshSkin* skin = nullptr);
-
-
- GLuint getVertexBuffer() const;
-
- bool hasVertexAttrib(int attrib) const;
-
- ssize_t getMeshVertexAttribCount() const;
-
- const MeshVertexAttrib& getMeshVertexAttribute(int idx);
-
- int getVertexSizeInBytes() const;
-
- void setTexture(const std::string& texPath);
-
- void setTexture(Texture2D* tex);
-
- void setTexture(Texture2D* tex, NTextureData::Usage usage,bool cacheFileName = true);
-
- void setTexture(const std::string& texPath, NTextureData::Usage usage);
-
- Texture2D* getTexture() const;
-
- Texture2D* getTexture(NTextureData::Usage usage);
-
-
- void setVisible(bool visible);
- bool isVisible() const;
-
-
- MeshSkin* getSkin() const { return _skin; }
-
-
- MeshIndexData* getMeshIndexData() const { return _meshIndexData; }
-
-
- GLProgramState* getGLProgramState() const;
-
-
- const std::string& getName() const { return _name; }
-
- void setBlendFunc(const BlendFunc &blendFunc);
- const BlendFunc &getBlendFunc() const;
-
-
- GLenum getPrimitiveType() const;
-
- ssize_t getIndexCount() const;
-
- GLenum getIndexFormat() const;
-
- GLuint getIndexBuffer() const;
-
-
- const AABB& getAABB() const { return _aabb; }
-
- void setGLProgramState(GLProgramState* glProgramState);
-
- void setMaterial(Material* material);
-
- Material* getMaterial() const;
- void draw(Renderer* renderer, float globalZ, const Mat4& transform, uint32_t flags, unsigned int lightMask, const Vec4& color, bool forceDepthWrite);
-
- MeshCommand& getMeshCommand() { return _meshCommand; }
-
- void setSkin(MeshSkin* skin);
-
- void setMeshIndexData(MeshIndexData* indexdata);
-
- void setName(const std::string& name) { _name = name; }
-
-
- void calculateAABB();
-
-
- void setForce2DQueue(bool force2D) { _force2DQueue = force2D; }
- std::string getTextureFileName(){ return _texFile; }
- CC_CONSTRUCTOR_ACCESS:
- Mesh();
- virtual ~Mesh();
- protected:
- void resetLightUniformValues();
- void setLightUniforms(Pass* pass, Scene* scene, const Vec4& color, unsigned int lightmask);
- void bindMeshCommand();
- std::map<NTextureData::Usage, Texture2D*> _textures;
- MeshSkin* _skin;
- bool _visible;
- bool _isTransparent;
- bool _force2DQueue;
-
- std::string _name;
- MeshCommand _meshCommand;
- MeshIndexData* _meshIndexData;
- GLProgramState* _glProgramState;
- BlendFunc _blend;
- bool _blendDirty;
- Material* _material;
- AABB _aabb;
- std::function<void()> _visibleChanged;
-
-
- std::vector<Vec3> _dirLightUniformColorValues;
- std::vector<Vec3> _dirLightUniformDirValues;
-
- std::vector<Vec3> _pointLightUniformColorValues;
- std::vector<Vec3> _pointLightUniformPositionValues;
- std::vector<float> _pointLightUniformRangeInverseValues;
-
- std::vector<Vec3> _spotLightUniformColorValues;
- std::vector<Vec3> _spotLightUniformPositionValues;
- std::vector<Vec3> _spotLightUniformDirValues;
- std::vector<float> _spotLightUniformInnerAngleCosValues;
- std::vector<float> _spotLightUniformOuterAngleCosValues;
- std::vector<float> _spotLightUniformRangeInverseValues;
- std::string _texFile;
- };
- extern std::string CC_DLL s_uniformSamplerName[];
- NS_CC_END
- #endif
|