diff fuhtark_test/include/winapi/mspterm.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fuhtark_test/include/winapi/mspterm.h	Wed Nov 26 21:36:48 2025 +0700
@@ -0,0 +1,75 @@
+#ifndef _MSPTERM_H_
+#define _MSPTERM_H_
+
+template <class T> class ITTerminalVtblBase : public ITTerminal {
+};
+
+class CBaseTerminal : virtual public CComObjectRootEx<CComMultiThreadModelNoCS>,public IDispatchImpl<ITTerminalVtblBase<CBaseTerminal>,&IID_ITTerminal,&LIBID_TAPI3Lib>,public ITTerminalControl
+{
+  BEGIN_COM_MAP(CBaseTerminal)
+    COM_INTERFACE_ENTRY(IDispatch)
+    COM_INTERFACE_ENTRY(ITTerminal)
+    COM_INTERFACE_ENTRY(ITTerminalControl)
+    COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal,m_pFTM)
+  END_COM_MAP()
+  DECLARE_VQI()
+  DECLARE_GET_CONTROLLING_UNKNOWN()
+public:
+  CBaseTerminal();
+  virtual ~CBaseTerminal();
+public:
+  STDMETHOD(get_TerminalClass)(BSTR *pVal);
+  STDMETHOD(get_TerminalType)(TERMINAL_TYPE *pVal);
+  STDMETHOD(get_State)(TERMINAL_STATE *pVal);
+  STDMETHOD(get_Name)(BSTR *pVal);
+  STDMETHOD(get_MediaType)(long *plMediaType);
+  STDMETHOD(get_Direction)(TERMINAL_DIRECTION *pDirection);
+public:
+  virtual HRESULT Initialize(IID iidTerminalClass,DWORD dwMediaType,TERMINAL_DIRECTION Direction,MSP_HANDLE htAddress);
+public:
+  STDMETHOD (get_AddressHandle)(MSP_HANDLE *phtAddress);
+  STDMETHOD (ConnectTerminal)(IGraphBuilder *pGraph,DWORD dwTerminalDirection,DWORD *pdwNumPins,IPin **ppPins);
+  STDMETHOD (CompleteConnectTerminal)(void);
+  STDMETHOD (DisconnectTerminal)(IGraphBuilder *pGraph,DWORD dwReserved);
+  STDMETHOD (RunRenderFilter)(void) = 0;
+  STDMETHOD (StopRenderFilter)(void) = 0;
+protected:
+  CMSPCritSection m_CritSec;
+public:
+  TERMINAL_DIRECTION m_TerminalDirection;
+  TERMINAL_TYPE m_TerminalType;
+  TERMINAL_STATE m_TerminalState;
+  TCHAR m_szName[MAX_PATH + 1];
+  IID m_TerminalClassID;
+  DWORD m_dwMediaType;
+  MSP_HANDLE m_htAddress;
+  IUnknown *m_pFTM;
+  CComPtr<IGraphBuilder> m_pGraph;
+  virtual HRESULT AddFiltersToGraph() = 0;
+  virtual HRESULT ConnectFilters() { return S_OK; }
+  virtual HRESULT GetNumExposedPins(IGraphBuilder *pGraph,DWORD *pdwNumPins) = 0;
+  virtual HRESULT GetExposedPins(IPin **ppPins) = 0;
+  virtual DWORD GetSupportedMediaTypes(void) = 0;
+  virtual HRESULT RemoveFiltersFromGraph() = 0;
+  WINBOOL MediaTypeSupported(long lMediaType);
+};
+
+class CSingleFilterTerminal : public CBaseTerminal {
+public:
+  CComPtr<IPin> m_pIPin;
+  CComPtr<IBaseFilter> m_pIFilter;
+public:
+  STDMETHOD(RunRenderFilter)(void);
+  STDMETHOD(StopRenderFilter)(void);
+  virtual HRESULT GetNumExposedPins(IGraphBuilder *pGraph,DWORD *pdwNumPins);
+  virtual HRESULT GetExposedPins(IPin **ppPins);
+  virtual HRESULT RemoveFiltersFromGraph();
+};
+
+class CSingleFilterStaticTerminal : public CSingleFilterTerminal {
+public:
+  CComPtr<IMoniker> m_pMoniker;
+  WINBOOL m_bMark;
+  virtual HRESULT CompareMoniker(IMoniker *pMoniker);
+};
+#endif