|
1 | 1 | /* |
2 | | - * Copyright 2019-2023 Diligent Graphics LLC |
| 2 | + * Copyright 2019-2024 Diligent Graphics LLC |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
@@ -2143,4 +2143,97 @@ using RenderDeviceX_E = RenderDeviceX<true>; |
2143 | 2143 | // Returns Null pointer if object creation failed |
2144 | 2144 | using RenderDeviceX_N = RenderDeviceX<false>; |
2145 | 2145 |
|
| 2146 | + |
| 2147 | +/// C++ wrapper over IShaderResourceVariable. |
| 2148 | +class ShaderResourceVariableX |
| 2149 | +{ |
| 2150 | +public: |
| 2151 | + ShaderResourceVariableX() noexcept {} |
| 2152 | + explicit ShaderResourceVariableX(IShaderResourceVariable* pVar) noexcept : |
| 2153 | + m_pVar{pVar} |
| 2154 | + { |
| 2155 | + } |
| 2156 | + |
| 2157 | + ShaderResourceVariableX(IShaderResourceBinding* pSRB, SHADER_TYPE ShaderStage, const char* Name) noexcept : |
| 2158 | + m_pVar{pSRB->GetVariableByName(ShaderStage, Name)} |
| 2159 | + { |
| 2160 | + } |
| 2161 | + |
| 2162 | + ShaderResourceVariableX(IPipelineState* pPSO, SHADER_TYPE ShaderStage, const char* Name) noexcept : |
| 2163 | + m_pVar{pPSO->GetStaticVariableByName(ShaderStage, Name)} |
| 2164 | + { |
| 2165 | + } |
| 2166 | + |
| 2167 | + explicit operator bool() const noexcept |
| 2168 | + { |
| 2169 | + return m_pVar != nullptr; |
| 2170 | + } |
| 2171 | + |
| 2172 | + operator IShaderResourceVariable*() const noexcept |
| 2173 | + { |
| 2174 | + return m_pVar; |
| 2175 | + } |
| 2176 | + |
| 2177 | + IShaderResourceVariable* operator->() const noexcept |
| 2178 | + { |
| 2179 | + return m_pVar; |
| 2180 | + } |
| 2181 | + |
| 2182 | + bool Set(IDeviceObject* pObject, SET_SHADER_RESOURCE_FLAGS Flags = SET_SHADER_RESOURCE_FLAG_NONE) |
| 2183 | + { |
| 2184 | + if (m_pVar) |
| 2185 | + { |
| 2186 | + m_pVar->Set(pObject, Flags); |
| 2187 | + return true; |
| 2188 | + } |
| 2189 | + return false; |
| 2190 | + } |
| 2191 | + |
| 2192 | + bool SetArray(IDeviceObject* const* ppObjects, |
| 2193 | + Uint32 FirstElement, |
| 2194 | + Uint32 NumElements, |
| 2195 | + SET_SHADER_RESOURCE_FLAGS Flags = SET_SHADER_RESOURCE_FLAG_NONE) |
| 2196 | + { |
| 2197 | + if (m_pVar) |
| 2198 | + { |
| 2199 | + m_pVar->SetArray(ppObjects, FirstElement, NumElements, Flags); |
| 2200 | + return true; |
| 2201 | + } |
| 2202 | + return false; |
| 2203 | + } |
| 2204 | + |
| 2205 | + bool SetBufferRange(IDeviceObject* pObject, |
| 2206 | + Uint64 Offset, |
| 2207 | + Uint64 Size, |
| 2208 | + Uint32 ArrayIndex = 0, |
| 2209 | + SET_SHADER_RESOURCE_FLAGS Flags = SET_SHADER_RESOURCE_FLAG_NONE) |
| 2210 | + { |
| 2211 | + if (m_pVar) |
| 2212 | + { |
| 2213 | + m_pVar->SetBufferRange(pObject, Offset, Size, ArrayIndex, Flags); |
| 2214 | + return true; |
| 2215 | + } |
| 2216 | + return false; |
| 2217 | + } |
| 2218 | + |
| 2219 | + bool SetBufferOffset(Uint32 Offset, |
| 2220 | + Uint32 ArrayIndex = 0) |
| 2221 | + { |
| 2222 | + if (m_pVar) |
| 2223 | + { |
| 2224 | + m_pVar->SetBufferOffset(Offset, ArrayIndex); |
| 2225 | + return true; |
| 2226 | + } |
| 2227 | + return false; |
| 2228 | + } |
| 2229 | + |
| 2230 | + IDeviceObject* Get(Uint32 ArrayIndex = 0) const |
| 2231 | + { |
| 2232 | + return m_pVar ? m_pVar->Get(ArrayIndex) : nullptr; |
| 2233 | + } |
| 2234 | + |
| 2235 | +private: |
| 2236 | + IShaderResourceVariable* m_pVar = nullptr; |
| 2237 | +}; |
| 2238 | + |
2146 | 2239 | } // namespace Diligent |
0 commit comments