|
- #include "libShaderFile.h"
-
- //#define LSF_DEBUG
- #ifdef LSF_DEBUG
- # include <stdio.h>
- #endif
-
- #if defined(WIN32) || defined(WIN64)
- # include <windows.h>
-
- typedef HMODULE lib_handle_t;
-
- lib_handle_t open_lib(const char* name)
- { return LoadLibrary(name); };
-
- void* get_addr(lib_handle_t handle, const char* name)
- { return GetProcAddress(handle, name); };
-
- int close_lib(lib_handle_t handle)
- { return FreeLibrary(handle); };
-
- #elif defined(LINUX)
- # include <dlfcn.h>
- # error "linux is not supported yet"
- #else
- # error "unknown operation system"
- #endif
-
- lib_handle_t handle = NULL;
- lsf_init_t lsf_init_intern = NULL;
- lsf_finish_t lsf_finish_intern = NULL;
-
- #ifndef LSF_DEBUG
- # define LoadProc(proc, name) \
- proc = get_addr(handle, name); \
- if (!proc) \
- return LSF_ERR_INVALID_METHOD_NAME
- #else
- # define LoadProc(proc, name) \
- proc = get_addr(handle, name); \
- printf("load method '%s' (addr=0x%016x)\n", name, proc); \
- if (!proc) \
- return LSF_ERR_INVALID_METHOD_NAME
- #endif
-
- int lsf_init(const char* libname)
- {
- #ifdef LSF_DEBUG
- printf("loading library '%s'\n", libname);
- #endif
-
- handle = open_lib(libname);
- if (!handle)
- return LSF_ERR_INVALID_LIBRARY_NAME;
-
- #ifdef LSF_DEBUG
- printf(" done (handle=0x%016x)\n", handle);
- #endif
-
- LoadProc(lsf_shader_file_create, "lsf_ShaderFile_create");
- LoadProc(lsf_shader_file_set_log_callback, "lsf_ShaderFile_setLogCallback");
- LoadProc(lsf_shader_file_load_from_file, "lsf_ShaderFile_loadFromFile");
- LoadProc(lsf_shader_file_save_to_file, "lsf_ShaderFile_saveToFile");
- LoadProc(lsf_shader_file_get_generator_names, "lsf_ShaderFile_getGeneratorNames");
- LoadProc(lsf_shader_file_destroy, "lsf_ShaderFile_destroy");
-
- LoadProc(lsf_generator_create, "lsf_Generator_create");
- LoadProc(lsf_generator_get_property_names, "lsf_Generator_getPropertyNames");
- LoadProc(lsf_generator_get_property, "lsf_Generator_getProperty");
- LoadProc(lsf_generator_get_property_by_name, "lsf_Generator_getPropertyByName");
- LoadProc(lsf_generator_set_property, "lsf_Generator_setProperty");
- LoadProc(lsf_generator_set_property_by_name, "lsf_Generator_setPropertyByName");
- LoadProc(lsf_generator_generate_code, "lsf_Generator_generateCode");
- LoadProc(lsf_generator_destroy, "lsf_Generator_destroy");
-
- LoadProc(lsf_init_intern, "lsf_init");
- LoadProc(lsf_get_last_error_code, "lsf_getLastErrorCode");
- LoadProc(lsf_get_last_error_msg, "lsf_getLastErrorMsg");
- LoadProc(lsf_get_last_error_trace, "lsf_getLastErrorTrace");
- LoadProc(lsf_finish_intern, "lsf_finish");
-
- return lsf_init_intern();
- }
-
- int lsf_finish(void)
- {
- lsf_error_code_t err = lsf_finish_intern();
- if (!close_lib(handle))
- return LSF_ERR_INVALID_LIBRARY_HANDLE;
- return err;
- }
|