FCT
载入中...
搜索中...
未找到
FCT::Layout类 参考

管理渲染管线的状态、资源布局和缓存。 更多...

#include <layout.h>

FCT::Layout 的协作图:
Collaboration graph

struct  PassResourceCache
struct  PassResourceState
struct  PipelineCache
struct  ShaderCache
struct  TraditionPipelineState

Public 成员函数

构造与上下文设置
template<typename... Args>
 Layout (FCT::Context *ctx, Args... args)
void ctx (FCT::Context *ctx)
 重新设置 FCT 上下文。
动态布局配置
void addVertexLayout (const FCT::VertexLayout &vertexLayout)
 添加一个顶点布局。
void setPixelLayout (const FCT::PixelLayout &pixelLayout)
 设置像素(片元)着色器的输出布局。
void addUniformSlot (const UniformSlot &uniformSlot)
 添加一个常量缓冲区(Uniform Buffer)的布局槽位。
void addTextureSlot (const FCT::TextureSlot &element)
void addTextureSlot (FCT::TextureElement element)
 添加一个纹理资源槽位。
void addSamplerSlot (const SamplerSlot &samplerSlot)
 添加一个采样器资源槽位。
void removeTextureSlot (const char *name)
 移除一个纹理资源槽位。
void setFixedImage (std::string name, FCT::Image *image)
 设置一个固定的图像资源,该资源不会在 begin/end 之间被清除。
void attachPass (std::string passName)
 将此 Layout 附加到一个渲染通道。
资源分配与渲染命令
Uniform allocateUniform (std::string name)
 根据已定义的 UniformSlot 分配一个 Uniform 实例。
void begin ()
 开始一个渲染批次。
void bindUniform (const Uniform &uniform)
 绑定一个 Uniform 常量缓冲区。
void bindUniform (Uniform *uniform)
void bindTexture (std::string name, FCT::Image *image)
 绑定一个纹理。
void bindSampler (std::string name, FCT::Sampler *sampler)
 绑定一个采样器。
void bindVertexShader (std::string code)
 绑定顶点着色器。
void bindPixelShader (std::string code)
 绑定像素着色器。
void bindVertexShader (const ShaderRef &ref)
 通过着色器引用绑定顶点着色器。
void bindPixelShader (const ShaderRef &ref)
 通过着色器引用绑定像素着色器。
template<typename T>
void drawMesh (RHI::CommandBuffer *cmdBuffer, T *mesh)
 绘制一个网格。
template<typename T>
void drawMesh (RHI::CommandBuffer *cmdBuffer, T &mesh)
 绘制一个网格。
void end ()
 结束渲染批次。
缓存管理
ShaderRef cacheVertexShader (const std::string &code)
 预缓存一个顶点着色器并返回其引用。
ShaderRef cachePixelShader (const std::string &code)
 预缓存一个像素着色器并返回其引用。
void clearPassResourceCache ()
 清空所有已缓存的 PassResource。
void clearPipelineCache ()
 清空所有已缓存的渲染管线。
void clearShaderCache ()
 清空所有已缓存的着色器。

Private 成员函数

template<typename... Args>
void proccessArgs (FCT::VertexLayout vertexLayout, Args... args)
template<class ... Args>
void proccessArgs (const std::vector< FCT::VertexLayout > &vertexLayouts, Args... args)
template<typename... Args>
void proccessArgs (SamplerSlot samplerSlot, Args... args)
template<typename... Args>
void proccessArgs (PassName passName, Args... args)
template<typename... Args>
void proccessArgs (uint32_t index, FCT::VertexLayout vertexLayout, Args... args)
template<typename... Args>
void proccessArgs (FCT::PixelLayout pixelLayout, Args... args)
template<typename... Args>
void proccessArgs (TextureSlot textureSlot, Args... args)
template<typename... Args>
void proccessArgs (UniformSlot uniformSlot, Args... args)
void proccessArgs ()
FCT::PassResourcegetCurrentPassResource ()
FCT::RHI::RasterizationPipelinegetCurrentPipeline ()
void bindVertexShader (FCT::VertexShader *shader)
void bindPixelShader (FCT::PixelShader *shader)
FCT::VertexShaderallocateVertexShader (std::string code)
FCT::PixelShaderallocatePixelShader (std::string code)
VertexShadergetCacheVertexShader (std::string code)
PixelShadergetCachePixelShader (std::string code)
VertexShadergetCacheVertexShader (const ShaderRef &ref)
PixelShadergetCachePixelShader (const ShaderRef &ref)
void processUnhandledTextureSlots ()
uint32_t findNextAvailableIndex ()

Private 属性

FCT::Contextm_ctx
std::map< uint32_t, FCT::VertexLayoutm_vertexLayouts
std::map< std::string, FCT::ConstLayoutm_uniformLayouts
FCT::PixelLayout m_pixelLayout
FCT::ResourceLayout m_resourceLayout
FCT::ResourceLayout m_vertexResourceLayout
FCT::ResourceLayout m_pixelResourceLayout
std::unordered_map< std::string, FCT::Image * > m_fixedImages
std::map< std::string, Image * > m_textureFromPass
std::unordered_map< std::string, const char * > m_textureNames
uint32_t m_nextAvailableIndex = 0
std::vector< TextureSlotm_unhandledTextureSlots
bool m_hasVertexLayout = false
bool m_hasPixelLayout = false
FCT::RHI::Passm_pass
PassResourceState m_passResourceState
TraditionPipelineState m_pipelineState
PassResourceCache m_passResourceCache
PipelineCache m_pipelineCache
ShaderCache m_shaderCache

详细描述

管理渲染管线的状态、资源布局和缓存。

LayoutFCT 库的核心类之一,它封装了与特定渲染效果相关的所有配置, 包括顶点布局、资源(纹理、常量缓冲区、采样器)布局、着色器以及其他管线状态。 它通过构造函数链式配置,并提供了一套完整的渲染命令接口。

在文件 layout.h61 行定义.

构造及析构函数说明

◆ Layout()

template<typename ... Args>
FCT::Layout::Layout ( FCT::Context * ctx,
Args... args )

在文件 layout.hpp98 行定义.

函数调用图:

成员函数说明

◆ addSamplerSlot()

void FCT::Layout::addSamplerSlot ( const SamplerSlot & samplerSlot)

添加一个采样器资源槽位。

参数
samplerSlot采样器元素定义。
注解
修改布局会清空管线和资源缓存。

在文件 layout.cpp65 行定义.

函数调用图:

◆ addTextureSlot() [1/2]

void FCT::Layout::addTextureSlot ( const FCT::TextureSlot & element)

在文件 layout.cpp56 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ addTextureSlot() [2/2]

void FCT::Layout::addTextureSlot ( FCT::TextureElement element)

添加一个纹理资源槽位。

参数
element纹理元素定义。
注解
修改布局会清空管线和资源缓存。

在文件 layout.cpp32 行定义.

函数调用图:

◆ addUniformSlot()

void FCT::Layout::addUniformSlot ( const UniformSlot & uniformSlot)

添加一个常量缓冲区(Uniform Buffer)的布局槽位。

参数
uniformSlot常量缓冲区的布局定义。
注解
修改布局会清空管线和资源缓存。

在文件 layout.cpp47 行定义.

函数调用图:

◆ addVertexLayout()

void FCT::Layout::addVertexLayout ( const FCT::VertexLayout & vertexLayout)

添加一个顶点布局。

参数
vertexLayout顶点布局定义。
注解
修改布局会清空管线和资源缓存。

在文件 layout.cpp90 行定义.

函数调用图:

◆ allocatePixelShader()

FCT::PixelShader * FCT::Layout::allocatePixelShader ( std::string code)
private

在文件 layout.cpp190 行定义.

这是这个函数的调用关系图:

◆ allocateUniform()

Uniform FCT::Layout::allocateUniform ( std::string name)

根据已定义的 UniformSlot 分配一个 Uniform 实例。

参数
nameUniformSlot 的名称。
返回
返回一个 Uniform 封装对象,可用于后续数据更新和绑定。

在文件 layout.cpp167 行定义.

◆ allocateVertexShader()

FCT::VertexShader * FCT::Layout::allocateVertexShader ( std::string code)
private

在文件 layout.cpp172 行定义.

这是这个函数的调用关系图:

◆ attachPass()

void FCT::Layout::attachPass ( std::string passName)

将此 Layout 附加到一个渲染通道。

参数
passName渲染通道的名称。

在文件 layout.cpp132 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ begin()

void FCT::Layout::begin ( )

开始一个渲染批次。

注解
在调用一系列 bind* 和 draw* 命令之前必须调用此函数。它会重置当前帧的临时绑定状态。

在文件 layout.cpp205 行定义.

◆ bindPixelShader() [1/3]

void FCT::Layout::bindPixelShader ( const ShaderRef & ref)

通过着色器引用绑定像素着色器。

参数
ref通过 cachePixelShader 获取的着色器引用。

在文件 layout.cpp613 行定义.

函数调用图:

◆ bindPixelShader() [2/3]

void FCT::Layout::bindPixelShader ( FCT::PixelShader * shader)
private

在文件 layout.cpp243 行定义.

◆ bindPixelShader() [3/3]

void FCT::Layout::bindPixelShader ( std::string code)

绑定像素着色器。

参数
code像素着色器的源码字符串。

在文件 layout.cpp601 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ bindSampler()

void FCT::Layout::bindSampler ( std::string name,
FCT::Sampler * sampler )

绑定一个采样器。

参数
name采样器在着色器中的名称。
sampler指向 FCT::Sampler 对象的指针。

在文件 layout.cpp233 行定义.

◆ bindTexture()

void FCT::Layout::bindTexture ( std::string name,
FCT::Image * image )

绑定一个纹理。

参数
name纹理在着色器中的名称。
image指向 FCT::Image 对象的指针。

在文件 layout.cpp228 行定义.

◆ bindUniform() [1/2]

void FCT::Layout::bindUniform ( const Uniform & uniform)

绑定一个 Uniform 常量缓冲区。

参数
uniform通过 allocateUniform 创建的 Uniform 对象。

在文件 layout.cpp217 行定义.

函数调用图:

◆ bindUniform() [2/2]

void FCT::Layout::bindUniform ( Uniform * uniform)

在文件 layout.cpp223 行定义.

函数调用图:

◆ bindVertexShader() [1/3]

void FCT::Layout::bindVertexShader ( const ShaderRef & ref)

通过着色器引用绑定顶点着色器。

参数
ref通过 cacheVertexShader 获取的着色器引用。

在文件 layout.cpp607 行定义.

函数调用图:

◆ bindVertexShader() [2/3]

void FCT::Layout::bindVertexShader ( FCT::VertexShader * shader)
private

在文件 layout.cpp238 行定义.

◆ bindVertexShader() [3/3]

void FCT::Layout::bindVertexShader ( std::string code)

绑定顶点着色器。

参数
code顶点着色器的源码字符串。

在文件 layout.cpp595 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ cachePixelShader()

ShaderRef FCT::Layout::cachePixelShader ( const std::string & code)

预缓存一个像素着色器并返回其引用。

参数
code像素着色器的 GLSL 源码。
返回
ShaderRef 着色器引用,可用于后续的 bindPixelShader 调用。

在文件 layout.cpp585 行定义.

函数调用图:

◆ cacheVertexShader()

ShaderRef FCT::Layout::cacheVertexShader ( const std::string & code)

预缓存一个顶点着色器并返回其引用。

参数
code顶点着色器的 GLSL 源码。
返回
ShaderRef 着色器引用,可用于后续的 bindVertexShader 调用。

在文件 layout.cpp575 行定义.

函数调用图:

◆ clearPassResourceCache()

void FCT::Layout::clearPassResourceCache ( )

清空所有已缓存的 PassResource。

在文件 layout.cpp634 行定义.

这是这个函数的调用关系图:

◆ clearPipelineCache()

void FCT::Layout::clearPipelineCache ( )

清空所有已缓存的渲染管线。

在文件 layout.cpp644 行定义.

这是这个函数的调用关系图:

◆ clearShaderCache()

void FCT::Layout::clearShaderCache ( )

清空所有已缓存的着色器。

在文件 layout.cpp654 行定义.

这是这个函数的调用关系图:

◆ ctx()

void FCT::Layout::ctx ( FCT::Context * ctx)

重新设置 FCT 上下文。

参数
ctx新的 FCT 上下文指针。

在文件 layout.cpp22 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ drawMesh() [1/2]

template<typename T>
void FCT::Layout::drawMesh ( RHI::CommandBuffer * cmdBuffer,
T & mesh )

绘制一个网格。

模板参数
T网格类型,通常是 FCT::StaticMesh 或 FCT::DynamicMesh。
参数
cmdBufferRHI 命令缓冲区。
mesh对要绘制的网格对象的引用。

在文件 layout.hpp116 行定义.

函数调用图:

◆ drawMesh() [2/2]

template<typename T>
void FCT::Layout::drawMesh ( RHI::CommandBuffer * cmdBuffer,
T * mesh )

绘制一个网格。

模板参数
T网格类型,通常是 FCT::StaticMesh 或 FCT::DynamicMesh。
参数
cmdBufferRHI 命令缓冲区。
mesh指向要绘制的网格对象的指针。

在文件 layout.hpp104 行定义.

函数调用图:

◆ end()

void FCT::Layout::end ( )

结束渲染批次。

注解
必须与 begin() 配对使用。

在文件 layout.cpp249 行定义.

◆ findNextAvailableIndex()

uint32_t FCT::Layout::findNextAvailableIndex ( )
private

在文件 layout.cpp401 行定义.

这是这个函数的调用关系图:

◆ getCachePixelShader() [1/2]

PixelShader * FCT::Layout::getCachePixelShader ( const ShaderRef & ref)
private

在文件 layout.cpp567 行定义.

函数调用图:

◆ getCachePixelShader() [2/2]

PixelShader * FCT::Layout::getCachePixelShader ( std::string code)
private

在文件 layout.cpp551 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ getCacheVertexShader() [1/2]

VertexShader * FCT::Layout::getCacheVertexShader ( const ShaderRef & ref)
private

在文件 layout.cpp559 行定义.

函数调用图:

◆ getCacheVertexShader() [2/2]

VertexShader * FCT::Layout::getCacheVertexShader ( std::string code)
private

在文件 layout.cpp543 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ getCurrentPassResource()

FCT::PassResource * FCT::Layout::getCurrentPassResource ( )
private

在文件 layout.cpp409 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ getCurrentPipeline()

FCT::RHI::RasterizationPipeline * FCT::Layout::getCurrentPipeline ( )
private

在文件 layout.cpp428 行定义.

这是这个函数的调用关系图:

◆ proccessArgs() [1/9]

void FCT::Layout::proccessArgs ( )
private

在文件 layout.cpp14 行定义.

这是这个函数的调用关系图:

◆ proccessArgs() [2/9]

template<typename ... Args>
void FCT::Layout::proccessArgs ( const std::vector< FCT::VertexLayout > & vertexLayouts,
Args... args )
private

在文件 layout.hpp23 行定义.

函数调用图:

◆ proccessArgs() [3/9]

template<typename ... Args>
void FCT::Layout::proccessArgs ( FCT::PixelLayout pixelLayout,
Args... args )
private

在文件 layout.hpp74 行定义.

函数调用图:

◆ proccessArgs() [4/9]

template<typename ... Args>
void FCT::Layout::proccessArgs ( FCT::VertexLayout vertexLayout,
Args... args )
private

在文件 layout.hpp14 行定义.

函数调用图:

◆ proccessArgs() [5/9]

template<typename ... Args>
void FCT::Layout::proccessArgs ( PassName passName,
Args... args )
private

在文件 layout.hpp54 行定义.

函数调用图:

◆ proccessArgs() [6/9]

template<typename ... Args>
void FCT::Layout::proccessArgs ( SamplerSlot samplerSlot,
Args... args )
private

在文件 layout.hpp36 行定义.

函数调用图:

◆ proccessArgs() [7/9]

template<typename ... Args>
void FCT::Layout::proccessArgs ( TextureSlot textureSlot,
Args... args )
private

在文件 layout.hpp83 行定义.

函数调用图:

◆ proccessArgs() [8/9]

template<typename ... Args>
void FCT::Layout::proccessArgs ( uint32_t index,
FCT::VertexLayout vertexLayout,
Args... args )
private

在文件 layout.hpp65 行定义.

函数调用图:

◆ proccessArgs() [9/9]

template<typename ... Args>
void FCT::Layout::proccessArgs ( UniformSlot uniformSlot,
Args... args )
private

在文件 layout.hpp91 行定义.

函数调用图:

◆ processUnhandledTextureSlots()

void FCT::Layout::processUnhandledTextureSlots ( )
private

在文件 layout.cpp368 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ removeTextureSlot()

void FCT::Layout::removeTextureSlot ( const char * name)

移除一个纹理资源槽位。

参数
name要移除的纹理槽位名称。
注解
修改布局会清空管线和资源缓存。

在文件 layout.cpp110 行定义.

函数调用图:
这是这个函数的调用关系图:

◆ setFixedImage()

void FCT::Layout::setFixedImage ( std::string name,
FCT::Image * image )

设置一个固定的图像资源,该资源不会在 begin/end 之间被清除。

参数
name资源在着色器中的名称。
image指向 FCT::Image 对象的指针。

在文件 layout.cpp27 行定义.

这是这个函数的调用关系图:

◆ setPixelLayout()

void FCT::Layout::setPixelLayout ( const FCT::PixelLayout & pixelLayout)

设置像素(片元)着色器的输出布局。

参数
pixelLayout像素布局定义。
注解
修改布局会清空管线和资源缓存。

在文件 layout.cpp100 行定义.

函数调用图:

类成员变量说明

◆ m_ctx

FCT::Context* FCT::Layout::m_ctx
private

在文件 layout.h376 行定义.

◆ m_fixedImages

std::unordered_map<std::string, FCT::Image*> FCT::Layout::m_fixedImages
private

在文件 layout.h383 行定义.

◆ m_hasPixelLayout

bool FCT::Layout::m_hasPixelLayout = false
private

在文件 layout.h391 行定义.

◆ m_hasVertexLayout

bool FCT::Layout::m_hasVertexLayout = false
private

在文件 layout.h390 行定义.

◆ m_nextAvailableIndex

uint32_t FCT::Layout::m_nextAvailableIndex = 0
private

在文件 layout.h388 行定义.

◆ m_pass

FCT::RHI::Pass* FCT::Layout::m_pass
private

在文件 layout.h394 行定义.

◆ m_passResourceCache

PassResourceCache FCT::Layout::m_passResourceCache
private

在文件 layout.h399 行定义.

◆ m_passResourceState

PassResourceState FCT::Layout::m_passResourceState
private

在文件 layout.h395 行定义.

◆ m_pipelineCache

PipelineCache FCT::Layout::m_pipelineCache
private

在文件 layout.h400 行定义.

◆ m_pipelineState

TraditionPipelineState FCT::Layout::m_pipelineState
private

在文件 layout.h396 行定义.

◆ m_pixelLayout

FCT::PixelLayout FCT::Layout::m_pixelLayout
private

在文件 layout.h379 行定义.

◆ m_pixelResourceLayout

FCT::ResourceLayout FCT::Layout::m_pixelResourceLayout
private

在文件 layout.h382 行定义.

◆ m_resourceLayout

FCT::ResourceLayout FCT::Layout::m_resourceLayout
private

在文件 layout.h380 行定义.

◆ m_shaderCache

ShaderCache FCT::Layout::m_shaderCache
private

在文件 layout.h401 行定义.

◆ m_textureFromPass

std::map<std::string, Image*> FCT::Layout::m_textureFromPass
private

在文件 layout.h384 行定义.

◆ m_textureNames

std::unordered_map<std::string,const char*> FCT::Layout::m_textureNames
private

在文件 layout.h385 行定义.

◆ m_unhandledTextureSlots

std::vector<TextureSlot> FCT::Layout::m_unhandledTextureSlots
private

在文件 layout.h389 行定义.

◆ m_uniformLayouts

std::map<std::string, FCT::ConstLayout> FCT::Layout::m_uniformLayouts
private

在文件 layout.h378 行定义.

◆ m_vertexLayouts

std::map<uint32_t, FCT::VertexLayout> FCT::Layout::m_vertexLayouts
private

在文件 layout.h377 行定义.

◆ m_vertexResourceLayout

FCT::ResourceLayout FCT::Layout::m_vertexResourceLayout
private

在文件 layout.h381 行定义.


该类的文档由以下文件生成: