yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
7f04adbfb
master
1#ifndef SLANG_CORE_SHARED_LIBRARY_H 2#define SLANG_CORE_SHARED_LIBRARY_H 3 4#include "../core/slang-com-object.h" 5#include "../core/slang-common.h" 6#include "../core/slang-dictionary.h" 7#include "../core/slang-io.h" 8#include "../core/slang-platform.h" 9#include "slang-com-helper.h" 10#include "slang-com-ptr.h" 11#include "slang.h" 12 13namespace Slang 14{ 15 16class DefaultSharedLibraryLoader :public ISlangSharedLibraryLoader 17{ 18public : 19// ISlangUnknown 20// override ref counting, as DefaultSharedLibraryLoader is singleton 21SLANG_IUNKNOWN_QUERY_INTERFACE 22SLANG_NO_THROW uint32_t SLANG_MCALL addRef ()SLANG_OVERRIDE {return 1 ; } 23SLANG_NO_THROW uint32_t SLANG_MCALL release ()SLANG_OVERRIDE {return 1 ; } 24 25// ISlangSharedLibraryLoader 26virtual SLANG_NO_THROW SlangResult SLANG_MCALL 27loadSharedLibrary (const char * path ,ISlangSharedLibrary ** outSharedLibrary )SLANG_OVERRIDE ; 28 29SlangResult loadPlatformSharedLibrary (const char * path ,ISlangSharedLibrary ** outSharedLibrary ); 30 31/// Get the singleton 32static DefaultSharedLibraryLoader * getSingleton () {return & s_singleton ; } 33 34 35static SlangResult load ( 36ISlangSharedLibraryLoader * loader , 37const String & path , 38const String & name , 39ISlangSharedLibrary ** outLibrary ); 40 41private : 42/// Make so not constructible 43DefaultSharedLibraryLoader () {} 44virtual ~DefaultSharedLibraryLoader () {} 45 46ISlangUnknown * getInterface (const Guid & guid ); 47 48static DefaultSharedLibraryLoader s_singleton ; 49}; 50 51class DefaultSharedLibrary :public ComBaseObject ,public ISlangSharedLibrary 52{ 53public : 54SLANG_CLASS_GUID (0xe7f2597b ,0xf803 ,0x4b6e , {0xaf ,0x8b ,0xcb ,0xe3 ,0xa2 ,0x21 ,0xfd ,0x5a }) 55 56// ISlangUnknown 57SLANG_COM_BASE_IUNKNOWN_ALL 58// ICastable 59virtual SLANG_NO_THROW void * SLANG_MCALL castAs (const SlangUUID & guid )SLANG_OVERRIDE ; 60// ISlangSharedLibrary 61virtual SLANG_NO_THROW void * SLANG_MCALL findSymbolAddressByName (char const * name ) 62SLANG_OVERRIDE ; 63 64/// Ctor. 65DefaultSharedLibrary (const SharedLibrary ::Handle sharedLibraryHandle ) 66 :m_sharedLibraryHandle (sharedLibraryHandle ) 67 { 68SLANG_ASSERT (sharedLibraryHandle ); 69 } 70 71/// Need virtual dtor to keep delete this happy 72virtual ~DefaultSharedLibrary (); 73 74protected : 75void * getInterface (const Guid & guid ); 76void * getObject (const Guid & guid ); 77 78SharedLibrary ::Handle m_sharedLibraryHandle = nullptr ; 79}; 80 81class ScopeSharedLibrary :public DefaultSharedLibrary 82{ 83public : 84typedef DefaultSharedLibrary Super ; 85 86static ComPtr < ISlangSharedLibrary > create ( 87const SharedLibrary ::Handle sharedLibraryHandle , 88ISlangUnknown * scope ) 89 { 90return ComPtr < ISlangSharedLibrary > (new ScopeSharedLibrary (sharedLibraryHandle ,scope )); 91 } 92 93/// Ctor 94ScopeSharedLibrary (const SharedLibrary ::Handle sharedLibraryHandle ,ISlangUnknown * scope ) 95 :Super (sharedLibraryHandle ),m_scope (scope ) 96 { 97 } 98 99virtual ~ScopeSharedLibrary (); 100 101protected : 102ComPtr < ISlangUnknown > m_scope ; 103}; 104 105class SharedLibraryUtils 106{ 107public : 108static String getSharedLibraryFileName (void * symbolInLib ); 109static uint64_t getSharedLibraryTimestamp (void * symbolInLib ); 110}; 111 112}// namespace Slang 113 114#endif // SLANG_SHARED_LIBRARY_H_INCLUDED