mirror of
https://github.com/Blinue/Magpie.git
synced 2026-06-24 02:04:10 +00:00
70 lines
1.6 KiB
C++
70 lines
1.6 KiB
C++
#pragma once
|
|
#include <d2d1effectauthor.h>
|
|
#include <d2d1effecthelpers.h>
|
|
|
|
|
|
// 自定义 Effect 的基类
|
|
class EffectBase : public ID2D1EffectImpl {
|
|
public:
|
|
virtual ~EffectBase() = default;
|
|
|
|
/*
|
|
* 以下为 ID2D1EffectImpl 的方法
|
|
*/
|
|
|
|
IFACEMETHODIMP Initialize(
|
|
_In_ ID2D1EffectContext* pEffectContext,
|
|
_In_ ID2D1TransformGraph* pTransformGraph
|
|
) override {
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
IFACEMETHODIMP PrepareForRender(D2D1_CHANGE_TYPE changeType) override {
|
|
return S_OK;
|
|
}
|
|
|
|
IFACEMETHODIMP SetGraph(_In_ ID2D1TransformGraph* pGraph) override {
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
/*
|
|
* 以下为 IUnkown 的方法
|
|
*/
|
|
|
|
IFACEMETHODIMP_(ULONG) AddRef() override {
|
|
InterlockedIncrement(&_cRef);
|
|
return _cRef;
|
|
}
|
|
|
|
IFACEMETHODIMP_(ULONG) Release() override {
|
|
const ULONG ulRefCount = InterlockedDecrement(&_cRef);
|
|
if (0 == _cRef) {
|
|
delete this;
|
|
}
|
|
return ulRefCount;
|
|
}
|
|
|
|
IFACEMETHODIMP QueryInterface(_In_ REFIID riid, _Outptr_ void** ppOutput) override {
|
|
// Always set out parameter to NULL, validating it first.
|
|
if (!ppOutput)
|
|
return E_INVALIDARG;
|
|
|
|
*ppOutput = NULL;
|
|
if (riid == __uuidof(ID2D1EffectImpl)
|
|
|| riid == __uuidof(IUnknown)
|
|
) {
|
|
// Increment the reference count and return the pointer.
|
|
*ppOutput = static_cast<LPVOID>(this);
|
|
AddRef();
|
|
return NOERROR;
|
|
}
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
protected:
|
|
// 实现不能公开构造函数
|
|
EffectBase() {}
|
|
|
|
private:
|
|
ULONG _cRef = 1;
|
|
};
|