metal-shaderprocessor.hpp 948 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #pragma once
  2. #include <string>
  3. #include <graphics/shader-parser.h>
  4. struct ShaderBufferInfo {
  5. bool normals = false;
  6. bool colors = false;
  7. bool tangents = false;
  8. uint32_t texUnits = 0;
  9. };
  10. struct ShaderParser : shader_parser {
  11. inline ShaderParser() {shader_parser_init(this);}
  12. inline ~ShaderParser() {shader_parser_free(this);}
  13. };
  14. #ifdef __OBJC__
  15. struct ShaderProcessor {
  16. gs_device_t *device;
  17. ShaderParser parser;
  18. void BuildVertexDesc(__weak MTLVertexDescriptor *vertexDesc);
  19. void BuildParamInfo(ShaderBufferInfo &info);
  20. void BuildParams(std::vector<gs_shader_param> &params);
  21. void BuildSamplers(std::vector<std::unique_ptr<ShaderSampler>>
  22. &samplers);
  23. std::string BuildString(gs_shader_type type);
  24. void Process(const char *shader_string, const char *file);
  25. inline ShaderProcessor(gs_device_t *device) : device(device)
  26. {
  27. }
  28. };
  29. #endif
  30. extern std::string build_shader(gs_shader_type type, ShaderParser *parser);