yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
aefd1e3e0
master
1#ifndef SLANG_CORE_STD_WRITERS_H 2#define SLANG_CORE_STD_WRITERS_H 3 4#include "slang-com-ptr.h" 5#include "slang-writer.h" 6 7namespace Slang 8{ 9 10enum class DebugMessageType 11{ 12Info , 13Warning , 14Error 15}; 16 17enum class DebugMessageSource 18{ 19Layer , 20Driver , 21Slang 22}; 23 24class IDebugCallback 25{ 26public : 27virtual SLANG_NO_THROW void SLANG_MCALL 28handleMessage (DebugMessageType type ,DebugMessageSource source ,const char * message )= 0 ; 29}; 30 31/* Holds standard writers for the channels */ 32class StdWriters :public RefObject 33{ 34public : 35ISlangWriter * getWriter (SlangWriterChannel chan )const {return m_writers [chan ]; } 36void setWriter (SlangWriterChannel chan ,ISlangWriter * writer ) {m_writers [chan ]= writer ; } 37 38IDebugCallback * getDebugCallback ()const {return m_debugCallback ; } 39void setDebugCallback (IDebugCallback * callback ) {m_debugCallback = callback ; } 40 41/// Flush all the set writers 42void flushWriters (); 43 44/// Ctor 45StdWriters () {} 46 47/// Initialize a default context 48static RefPtr < StdWriters > createDefault (); 49static RefPtr < StdWriters > initDefaultSingleton (); 50 51static StdWriters * getSingleton () {return s_singleton ; } 52static void setSingleton (StdWriters * context ) {s_singleton = context ; } 53 54static WriterHelper getError () 55 { 56return getSingleton ()-> getWriter (SLANG_WRITER_CHANNEL_STD_ERROR ); 57 } 58static WriterHelper getOut () 59 { 60return getSingleton ()-> getWriter (SLANG_WRITER_CHANNEL_STD_OUTPUT ); 61 } 62static WriterHelper getDiagnostic () 63 { 64return getSingleton ()-> getWriter (SLANG_WRITER_CHANNEL_DIAGNOSTIC ); 65 } 66 67protected : 68ComPtr < ISlangWriter > m_writers [SLANG_WRITER_CHANNEL_COUNT_OF ]; 69IDebugCallback * m_debugCallback = nullptr ; 70 71static StdWriters * s_singleton ; 72}; 73 74// -------------------------------------------------------------------------- 75inline void StdWriters ::flushWriters () 76{ 77for (Index i = 0 ;i < Count (SLANG_WRITER_CHANNEL_COUNT_OF );++ i ) 78 { 79 autowriter = m_writers [i ]; 80if (writer ) 81 { 82writer -> flush (); 83 } 84 } 85} 86 87}// namespace Slang 88 89#endif