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.
 
 
 
 
 
 

92 lines
3.0 KiB

  1. #include "libShaderFile.h"
  2. //#define LSF_DEBUG
  3. #ifdef LSF_DEBUG
  4. # include <stdio.h>
  5. #endif
  6. #if defined(WIN32) || defined(WIN64)
  7. # include <windows.h>
  8. typedef HMODULE lib_handle_t;
  9. lib_handle_t open_lib(const char* name)
  10. { return LoadLibrary(name); };
  11. void* get_addr(lib_handle_t handle, const char* name)
  12. { return GetProcAddress(handle, name); };
  13. int close_lib(lib_handle_t handle)
  14. { return FreeLibrary(handle); };
  15. #elif defined(LINUX)
  16. # include <dlfcn.h>
  17. # error "linux is not supported yet"
  18. #else
  19. # error "unknown operation system"
  20. #endif
  21. lib_handle_t handle = NULL;
  22. lsf_init_t lsf_init_intern = NULL;
  23. lsf_finish_t lsf_finish_intern = NULL;
  24. #ifndef LSF_DEBUG
  25. # define LoadProc(proc, name) \
  26. proc = get_addr(handle, name); \
  27. if (!proc) \
  28. return LSF_ERR_INVALID_METHOD_NAME
  29. #else
  30. # define LoadProc(proc, name) \
  31. proc = get_addr(handle, name); \
  32. printf("load method '%s' (addr=0x%016x)\n", name, proc); \
  33. if (!proc) \
  34. return LSF_ERR_INVALID_METHOD_NAME
  35. #endif
  36. int lsf_init(const char* libname)
  37. {
  38. #ifdef LSF_DEBUG
  39. printf("loading library '%s'\n", libname);
  40. #endif
  41. handle = open_lib(libname);
  42. if (!handle)
  43. return LSF_ERR_INVALID_LIBRARY_NAME;
  44. #ifdef LSF_DEBUG
  45. printf(" done (handle=0x%016x)\n", handle);
  46. #endif
  47. LoadProc(lsf_shader_file_create, "lsf_ShaderFile_create");
  48. LoadProc(lsf_shader_file_set_log_callback, "lsf_ShaderFile_setLogCallback");
  49. LoadProc(lsf_shader_file_load_from_file, "lsf_ShaderFile_loadFromFile");
  50. LoadProc(lsf_shader_file_save_to_file, "lsf_ShaderFile_saveToFile");
  51. LoadProc(lsf_shader_file_get_generator_names, "lsf_ShaderFile_getGeneratorNames");
  52. LoadProc(lsf_shader_file_destroy, "lsf_ShaderFile_destroy");
  53. LoadProc(lsf_generator_create, "lsf_Generator_create");
  54. LoadProc(lsf_generator_get_property_names, "lsf_Generator_getPropertyNames");
  55. LoadProc(lsf_generator_get_property, "lsf_Generator_getProperty");
  56. LoadProc(lsf_generator_get_property_by_name, "lsf_Generator_getPropertyByName");
  57. LoadProc(lsf_generator_set_property, "lsf_Generator_setProperty");
  58. LoadProc(lsf_generator_set_property_by_name, "lsf_Generator_setPropertyByName");
  59. LoadProc(lsf_generator_generate_code, "lsf_Generator_generateCode");
  60. LoadProc(lsf_generator_destroy, "lsf_Generator_destroy");
  61. LoadProc(lsf_init_intern, "lsf_init");
  62. LoadProc(lsf_get_last_error_code, "lsf_getLastErrorCode");
  63. LoadProc(lsf_get_last_error_msg, "lsf_getLastErrorMsg");
  64. LoadProc(lsf_get_last_error_trace, "lsf_getLastErrorTrace");
  65. LoadProc(lsf_finish_intern, "lsf_finish");
  66. return lsf_init_intern();
  67. }
  68. int lsf_finish(void)
  69. {
  70. lsf_error_code_t err = lsf_finish_intern();
  71. if (!close_lib(handle))
  72. return LSF_ERR_INVALID_LIBRARY_HANDLE;
  73. return err;
  74. }