Skip to content

Commit 1210c85

Browse files
GraphicsTypesX: added ShaderResourceVariableX
1 parent d4e34ba commit 1210c85

1 file changed

Lines changed: 94 additions & 1 deletion

File tree

Graphics/GraphicsEngine/interface/GraphicsTypesX.hpp

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2023 Diligent Graphics LLC
2+
* Copyright 2019-2024 Diligent Graphics LLC
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -2143,4 +2143,97 @@ using RenderDeviceX_E = RenderDeviceX<true>;
21432143
// Returns Null pointer if object creation failed
21442144
using RenderDeviceX_N = RenderDeviceX<false>;
21452145

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+
21462239
} // namespace Diligent

0 commit comments

Comments
 (0)