You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
2.7 KiB

  1. #include <stdio.h>
  2. #include "../../libShaderFile.h"
  3. #if _WIN64
  4. # define LIB_NAME "..\..\..\libShaderFile-x86_64-win64.dll"
  5. #elif _WIN32
  6. # define LIB_NAME "..\..\..\libShaderFile-i386-win32.dll"
  7. #elif __linux__ && (__amd64 || __x86_64 || _M_AMD64 || __ppc64__)
  8. # define LIB_NAME "../../../libShaderFile-x86_64-linux.so"
  9. #elif __linux__ && (__i386 || _X86_)
  10. # define LIB_NAME "../../../libShaderFile-i386-linux.so"
  11. #else
  12. # error 'unknown operation system'
  13. #endif
  14. int main(int argc, char **argv)
  15. {
  16. lsf_shader_file_handle_t sfHandle = 0;
  17. lsf_shader_generator_handle_t sgHandle = 0;
  18. lsf_error_code_t err = LSF_ERR_NONE;
  19. int ret = 0, i = 3;
  20. const char* code = NULL;
  21. if (argc < 3)
  22. {
  23. printf("error: expected input file and generator/class name as parameter\n");
  24. return 1;
  25. }
  26. lsf_init(LIB_NAME);
  27. // create shader file
  28. sfHandle = lsf_shader_file_create();
  29. if (!sfHandle)
  30. {
  31. printf("unable to create shader file: %s\n", lsf_get_last_error_msg());
  32. ret = 2;
  33. goto cleanup_lib;
  34. }
  35. // load shader file
  36. err = lsf_shader_file_load_from_file(sfHandle, argv[1]);
  37. if (err != LSF_ERR_NONE)
  38. {
  39. printf("unable to load shader file: %s\n", lsf_get_last_error_msg());
  40. ret = 3;
  41. goto cleanup_shader_file;
  42. }
  43. // create generator
  44. sgHandle = lsf_generator_create(sfHandle, argv[2]);
  45. if (!sgHandle)
  46. {
  47. printf("unable to create generator: %s\n", lsf_get_last_error_msg());
  48. ret = 4;
  49. goto cleanup_shader_file;
  50. }
  51. // apply properties
  52. while (i < argc-1)
  53. {
  54. err = lsf_generator_set_property_by_name(sgHandle, argv[i], argv[i+1]);
  55. if (err != LSF_ERR_NONE)
  56. {
  57. printf("unable to set property (%s=%s) (err=0x%08x)", argv[i], argv[i+1], err);
  58. ret = 5;
  59. goto cleanup_shader_generator;
  60. }
  61. i += 2;
  62. }
  63. // generate code
  64. code = lsf_generator_generate_code(sgHandle);
  65. if (!code)
  66. {
  67. printf("unable to generate code: %s\n", lsf_get_last_error_msg());
  68. ret = 4;
  69. goto cleanup_shader_generator;
  70. }
  71. printf("%s", code);
  72. cleanup_shader_generator:
  73. err = lsf_generator_destroy(sgHandle);
  74. if (err != LSF_ERR_NONE)
  75. printf("warning: could not destroy generator handle: %d\n", err);
  76. cleanup_shader_file:
  77. err = lsf_shader_file_destroy(sfHandle);
  78. if (err != LSF_ERR_NONE)
  79. printf("warning: could not destroy shader file handle: %d\n", err);
  80. cleanup_lib:
  81. err = lsf_finish();
  82. if (err != LSF_ERR_NONE)
  83. printf("warning: could finish library: %d\n", err);
  84. return ret;
  85. }