Files
sbox-public/engine/Definitions/common/Render/IRenderContext.def
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

171 lines
6.6 KiB
Modula-2

native enum RenderPrimitiveType_t as NativeEngine.RenderPrimitiveType
native enum RenderTextureDimension_t as NativeEngine.RenderTextureDimension
native enum RenderShaderType_t as NativeEngine.RenderShaderType
native enum RenderColorSpace_t as NativeEngine.RenderColorSpace
native enum RsFilter_t is Sandbox.Rendering.FilterMode;
native enum RsTextureAddressMode_t is Sandbox.Rendering.TextureAddressMode;
native enum RsComparison_t is NativeEngine.ComparisonMode;
native enum RenderBarrierAccessFlags_t is NativeEngine.RenderBarrierAccessFlags_t;
native enum RenderBarrierPipelineStageFlags_t is NativeEngine.RenderBarrierPipelineStageFlags_t;
native pointer VertexBufferHandle_t as NativeEngine.VertexBufferHandle_t
native pointer IndexBufferHandle_t as NativeEngine.IndexBufferHandle_t
native pointer RenderShaderHandle_t as NativeEngine.RenderShaderHandle_t
native enum RenderImageLayout_t is NativeEngine.RenderImageLayout_t;
native class IReadTexturePixelsCallback as NativeEngine.IReadTexturePixelsCallback
{
}
native class IReadBufferCallback as NativeEngine.IReadBufferCallback
{
}
native class IRenderContext as NativeEngine.IRenderContext
{
void Draw( RenderPrimitiveType type, int nFirstVertex, int nVertexCount );
void DrawInstanced( RenderPrimitiveType type, int nFirstVertex, int nVertexCountPerInstance, int nInstanceCount );
void DrawIndexed( RenderPrimitiveType type, int nFirstIndex, int nIndexCount, int nMaxVertexCount, int nBaseVertex );
void DrawIndexedInstanced( RenderPrimitiveType type, int nFirstIndex, int nIndexCountPerInstance, int nInstanceCount, int nMaxVertexCount, int nBaseVertex );
void DrawInstancedIndirect( RenderPrimitiveType type, RenderBufferHandle_t hDrawArgBuffer, uint nBufferOffset );
void DrawIndexedInstancedIndirect( RenderPrimitiveType type, RenderBufferHandle_t hDrawArgBuffer, uint nBufferOffset );
inline void TextureBarrierTransition( ITexture hSrc, int mips, RenderBarrierPipelineStageFlags_t srcStage, RenderBarrierPipelineStageFlags_t dstStage, RenderImageLayout_t layout, RenderBarrierAccessFlags_t srcFlags, RenderBarrierAccessFlags_t dstFlags )
{
RenderUAVBarrier_t uavBarrier { hSrc, srcStage, dstStage, srcFlags, dstFlags, -1, -1, layout };
self->TextureBarrier( 1, &hSrc, &layout );
self->UAVBarrier( 1, &uavBarrier );
}
inline void BufferBarrierTransition( RenderBufferHandle_t hSrc, RenderBarrierPipelineStageFlags_t srcStage, RenderBarrierPipelineStageFlags_t dstStage, RenderBarrierAccessFlags_t srcFlags, RenderBarrierAccessFlags_t dstFlags )
{
self->BufferBarrier( RenderBufferBarrier_t{ hSrc, srcStage, dstStage, srcFlags, dstFlags } );
}
void SetScissorRect( NativeRect rect );
CRenderAttributes GetAttributesPtrForModify();
void GenerateMipMaps( ITexture material );
inline void Clear( Vector4 col, bool clearColor, bool clearDepth, bool clearStencil )
{
RenderClearFlags_t flags = (RenderClearFlags_t)0;
if ( clearColor ) flags |= RENDER_CLEAR_FLAGS_CLEAR_COLOR;
if ( clearDepth ) flags |= RENDER_CLEAR_FLAGS_CLEAR_DEPTH;
if ( clearStencil ) flags |= RENDER_CLEAR_FLAGS_CLEAR_STENCIL;
self->Clear( col, flags );
}
inline void BindRenderTargets( ITexture colorTexture, ITexture depthTexture, ISceneLayer layer )
{
// We can have a layer that only renders to color but if we only bind depth assume we want to blit to main framebuffer
if( colorTexture == RENDER_TEXTURE_HANDLE_INVALID )
colorTexture = layer->GetRenderTargetDesc().m_pColorTargets[0];
RenderTargetDesc_t rtDesc( colorTexture, depthTexture, RENDER_SRGB );
self->BindRenderTargets( rtDesc );
}
inline void RestoreRenderTargets( ISceneLayer layer )
{
self->BindRenderTargets( layer->GetRenderTargetDesc() );
}
inline void SetViewport( Rect_t rect )
{
RenderViewport_t vp;
vp.Init( rect );
self->SetViewports( 1, &vp );
}
inline void SetViewport( RenderViewport_t viewport )
{
self->SetViewports( 1, &viewport );
}
inline void SetViewport( int x, int y, int w, int h )
{
RenderViewport_t vp;
vp.Init( x, y, w, h );
self->SetViewports( 1, &vp );
}
inline RenderViewport_t GetViewport()
{
RenderViewport_t viewport;
self->GetViewport( &viewport, 0 );
return viewport;
}
void Submit();
void SetAssociatedThreadIndex();
inline void BindRenderTargets( SwapChainHandle_t swapChain, bool color, bool depth )
{
self->BindRenderTargets( RenderTargetDesc_t( swapChain, color, depth ) );
}
bool BindIndexBuffer( IndexBufferHandle_t hIndexBuffer, int nOffset );
bool BindIndexBuffer( RenderBufferHandle_t hIndexBuffer, int nIndexSize, int nOffset );
bool BindVertexBuffer( int nSlot, VertexBufferHandle_t hVertexBuffer, int nOffset );
bool BindVertexBuffer( int nSlot, VertexBufferHandle_t hVertexBuffer, int nOffset, int nStride );
bool BindVertexBuffer( int nSlot, RenderBufferHandle_t hVertexBuffer, int nOffset );
bool BindVertexBuffer( int nSlot, RenderBufferHandle_t hVertexBuffer, int nOffset, int nStride );
inline void BindVertexShader( RenderShaderHandle_t hVertexShader, VertexBufferHandle_t hInputLayout )
{
self->BindVertexShader( hVertexShader, self->GetInputLayoutForVertexBuffer( hInputLayout ) );
}
inline void BindPixelShader( RenderShaderHandle_t hShader )
{
self->BindShader( RENDER_PIXEL_SHADER, hShader );
}
inline void SetDynamicConstantBufferData( RenderShaderType shaderType, void* pData, int nSize, int slot )
{
DynamicLockDesc_t lock;
ConstantBufferHandle_t hConstantBuffer = self->LockDynamicConstantBuffer( nSize, &lock );
if ( lock.m_pMemory != nullptr )
{
V_memcpy( lock.m_pMemory, pData, nSize );
self->UnlockDynamicConstantBuffer( hConstantBuffer, nSize );
self->BindConstantBuffer( shaderType, hConstantBuffer, 0 );
}
}
inline void BindTexture( int nTextureIndex, ITexture hTexture )
{
self->SetSamplerStatePS( 0, RS_FILTER_MIN_MAG_MIP_POINT, RS_TEXTURE_ADDRESS_WRAP, RS_TEXTURE_ADDRESS_WRAP, RS_TEXTURE_ADDRESS_WRAP );
self->BindTexture( nTextureIndex, hTexture, RENDER_TEXTURE_DIMENSION_2D, RENDER_PIXEL_SHADER, RENDER_SRGB );
}
inline void ReadTexturePixels(ITexture hTexture, IReadTexturePixelsCallback pCallback, NativeRect srcRect, int nSrcSlice, int nSrcMip, bool bDeleteCallbackWhenFinished )
{
Rect_t* pSrcRect = nullptr;
if ( !srcRect.IsEmpty() )
{
pSrcRect = &srcRect;
}
self->ReadTexturePixels( hTexture, pCallback, pSrcRect, nSrcSlice, nSrcMip, bDeleteCallbackWhenFinished );
}
void ReadBuffer( RenderBufferHandle_t hBuffer, IReadBufferCallback pCallback, int nOffset, int nBytesToRead, bool bDeleteCallbackWhenFinished );
// PIX/RenderDoc markers
void BeginPixEvent( string name );
void EndPixEvent();
void PixSetMarker( string name );
}