Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

101 linhas
2.3 KiB

  1. //
  2. // Lol Engine
  3. //
  4. // Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net>
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the Do What The Fuck You Want To
  7. // Public License, Version 2, as published by Sam Hocevar. See
  8. // http://sam.zoy.org/projects/COPYING.WTFPL for more details.
  9. //
  10. //
  11. // The Shader class
  12. // ----------------
  13. //
  14. #if !defined __LOL_SHADER_H__
  15. #define __LOL_SHADER_H__
  16. #include <stdint.h>
  17. namespace lol
  18. {
  19. struct ShaderUniform
  20. {
  21. friend class Shader;
  22. public:
  23. inline ShaderUniform() : flags(0) {}
  24. private:
  25. uintptr_t frag, vert;
  26. /* FIXME: do we really need this to indicate which locations are valid? */
  27. uint32_t flags;
  28. };
  29. struct ShaderAttrib
  30. {
  31. friend class Shader;
  32. friend class VertexDeclaration;
  33. public:
  34. inline ShaderAttrib() : m_flags((uint64_t)0 - 1) {}
  35. private:
  36. uint64_t m_flags;
  37. };
  38. struct ShaderTexture
  39. {
  40. friend class Shader;
  41. friend class FrameBuffer;
  42. public:
  43. inline ShaderTexture() : m_flags(0) {}
  44. private:
  45. uint64_t m_flags;
  46. };
  47. class ShaderData;
  48. class Shader
  49. {
  50. public:
  51. static Shader *Create(char const *lolfx);
  52. static void Destroy(Shader *shader);
  53. ShaderAttrib GetAttribLocation(char const *attr, struct VertexUsage usage,
  54. int index) const;
  55. ShaderUniform GetUniformLocation(char const *uni) const;
  56. void SetUniform(ShaderUniform const &uni, int i);
  57. void SetUniform(ShaderUniform const &uni, ivec2 const &v);
  58. void SetUniform(ShaderUniform const &uni, ivec3 const &v);
  59. void SetUniform(ShaderUniform const &uni, ivec4 const &v);
  60. void SetUniform(ShaderUniform const &uni, float f);
  61. void SetUniform(ShaderUniform const &uni, vec2 const &v);
  62. void SetUniform(ShaderUniform const &uni, vec3 const &v);
  63. void SetUniform(ShaderUniform const &uni, vec4 const &v);
  64. void SetUniform(ShaderUniform const &uni, mat2 const &m);
  65. void SetUniform(ShaderUniform const &uni, mat3 const &m);
  66. void SetUniform(ShaderUniform const &uni, mat4 const &m);
  67. void SetUniform(ShaderUniform const &uni, ShaderTexture tex, int index);
  68. void Bind() const;
  69. void Unbind() const;
  70. protected:
  71. Shader(char const *vert, char const *frag);
  72. ~Shader();
  73. private:
  74. ShaderData *data;
  75. };
  76. } /* namespace lol */
  77. #endif // __LOL_SHADER_H__