Diligent Engine API Reference: D:/GitHub/DiligentEngine/DiligentCore/Graphics/GraphicsEngineD3DBase/include/ShaderVariableD3DBase.h Source File

Diligent Engine API Reference

ShaderVariableD3DBase.h
1 /* Copyright 2015-2018 Egor Yusov
2 *
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
10 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.
12 *
13 * In no event and under no legal theory, whether in tort (including negligence),
14 * contract, or otherwise, unless required by applicable law (such as deliberate
15 * and grossly negligent acts) or agreed to in writing, shall any Contributor be
16 * liable for any damages, including any direct, indirect, special, incidental,
17 * or consequential damages of any character arising as a result of this License or
18 * out of the use or inability to use the software (including but not limited to damages
19 * for loss of goodwill, work stoppage, computer failure or malfunction, or any and
20 * all other commercial damages or losses), even if such Contributor has been advised
21 * of the possibility of such damages.
22 */
23
24 #pragma once
25
26 #include "Shader.h"
27
30
31 namespace Diligent
32 {
33 template<typename TShaderResourceLayout>
34 struct ShaderVariableD3DBase : public IShaderVariable
35 {
36 ShaderVariableD3DBase(TShaderResourceLayout &ParentResLayout, const D3DShaderResourceAttribs &ResourcesAttribs) :
37 m_ParentResLayout(ParentResLayout),
38 Attribs(ResourcesAttribs)
39 {
40 }
41
42 virtual IReferenceCounters* GetReferenceCounters()const override final
43 {
44 return m_ParentResLayout.GetOwner().GetReferenceCounters();
45 }
46
47 virtual Atomics::Long AddRef()override final
48 {
49 return m_ParentResLayout.GetOwner().AddRef();
50 }
51
52 virtual Atomics::Long Release()override final
53 {
54 return m_ParentResLayout.GetOwner().Release();
55 }
56
57 void QueryInterface( const INTERFACE_ID &IID, IObject **ppInterface )override final
58 {
59 if( ppInterface == nullptr )
60 return;
61
62 *ppInterface = nullptr;
63 if( IID == IID_ShaderVariable || IID == IID_Unknown )
64 {
65 *ppInterface = this;
66 (*ppInterface)->AddRef();
67 }
68 }
69
70 const D3DShaderResourceAttribs &Attribs;
71
72 protected:
73 TShaderResourceLayout &m_ParentResLayout;
74 };
75 }
Diligent
Graphics engine namespace.
Definition: AdaptiveFixedBlockAllocator.h:30
Diligent::IID_Unknown
static constexpr INTERFACE_ID IID_Unknown
Unknown interface.
Definition: InterfaceID.h:50