diff options
Diffstat (limited to 'source/libs/asura-lib-core/graphics/shader.h')
-rw-r--r-- | source/libs/asura-lib-core/graphics/shader.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/source/libs/asura-lib-core/graphics/shader.h b/source/libs/asura-lib-core/graphics/shader.h new file mode 100644 index 0000000..1c81355 --- /dev/null +++ b/source/libs/asura-lib-core/graphics/shader.h @@ -0,0 +1,126 @@ +#ifndef __ASURA_ENGINE_SHADER_H__ +#define __ASURA_ENGINE_SHADER_H__ + +#include <map> +#include <string> + +#include <asura-lib-utils/scripting/portable.hpp> +#include <asura-lib-utils/io/reloadable.h> +#include <asura-lib-utils/math/vector2.hpp> +#include <asura-lib-utils/math/vector3.hpp> +#include <asura-lib-utils/math/vector4.h> +#include <asura-lib-utils/math/matrix44.h> +#include <asura-lib-utils/stringmap.hpp> +#include <asura-lib-utils/manager.hpp> + +#include "color.h" +#include "texture.h" +#include "gl.h" + +namespace AsuraEngine +{ + namespace Graphics + { + + /// + /// һ��shader��һ���ڲ��ʼ乲���ij���Shader����������uniforms�Ͷ������ݣ�ֻ�ṩ����uniforms��use��ɫ���ķ������༭ + /// �����ÿ��shader����ͨ��shader�����ҵ�������uniforms����������¶��framework��material���á� + /// + class Shader ASURA_FINAL + : public Scripting::Portable<Shader> + , public AEIO::Reloadable + { + public: + + Shader(); + + ~Shader(); + + /// + /// �Ӵ������shader������ʱ���ȼ���Ƿ����ϴλ����uniforms location map��ʹ��glAttachShader���±���������ɫ���� + /// ��������������ɫ������ + /// + bool Load(const std::string& vertexShader, const std::string& fragmentShader); + + /// + /// ������shader����Ϊ� + /// + void Use(); + + /// + /// ������shader����Ϊ�ǻ + /// + void Unuse(); + + /// + /// ���Ѿ�֪��uniform location������£�����ֵ�� + /// + void SetUniformFloat(uint loc, float value); + void SetUniformTexture(uint loc, const Texture& texture); + void SetUniformVector2(uint loc, const Math::Vector2f& vec2); + void SetUniformVector3(uint loc, const Math::Vector3f& vec3); + void SetUniformVector4(uint loc, const Math::Vector4f& vec4); + void SetUniformColor(uint loc, const Color& color); + void SetUniformMatrix44(uint loc, const Math::Matrix44& mat44); + + uint GetUniformLocation(const std::string& uniform); + + bool HasUniform(const std::string& uniform); + + GLuint GetGLProgramHandle(); + + /// + /// ���texture unit������һ��Ϊ16�� + /// + static uint GetGLTextureUnitCount(); + + private: + + /// + /// ��ǰ���shader + /// + static Shader* mCurrentShader; + + /// + /// �������ñ����� + /// vec2 Asura_Time xֵΪ���뵱ǰ������ʼ��ʱ�䣬yֵΪ��һ֡��ʱ���� + /// vec2 Asura_RenderTargetSize RT�Ĵ�С��������Ϊ��λ + /// Texture Asura_MainTexture ������ + /// + void SetBuiltInUniforms(); + + /// + /// OpenGL shader program handle. + /// + GLuint mProgramHandle; + + //------------------------------------------------------------------------------// + + public: + + LUAX_DECL_FACTORY(SimShader); + + LUAX_DECL_METHOD(_New); + LUAX_DECL_METHOD(_Use); + LUAX_DECL_METHOD(_Unuse); + LUAX_DECL_METHOD(_Load); + LUAX_DECL_METHOD(_HasUniform); + LUAX_DECL_METHOD(_GetUniformLocation); + LUAX_DECL_METHOD(_SetBuiltInUniforms); + LUAX_DECL_METHOD(_SetUniformFloat); + LUAX_DECL_METHOD(_SetUniformTexture); + LUAX_DECL_METHOD(_SetUniformVector2); + LUAX_DECL_METHOD(_SetUniformVector3); + LUAX_DECL_METHOD(_SetUniformVector4); + LUAX_DECL_METHOD(_SetUniformColor); + + private: + + Luax::LuaxMemberRef mCodeLuaRef; + + }; + + } +} + +#endif
\ No newline at end of file |