HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RV_Render Class Reference

#include <RV_Render.h>

Classes

struct  DefaultDrawTask
 
struct  DrawState
 
struct  DrawTask
 
struct  rv_MemoryBarriers
 

Public Types

typedef UT_Map
< RV_BarrierScope,
rv_MemoryBarriers
rv_BarrierMap
 

Public Member Functions

 RV_Render (RV_Instance *inst)
 
 ~RV_Render ()
 
 RV_Render (const RV_Render &)=delete
 
 RV_Render (RV_Render &&)=delete
 
RV_Instanceinstance ()
 The instance associated with this render. More...
 
VkDevice device ()
 The raw vulkan device. More...
 
RV_VKCommandBuffergetCurrentCB ()
 The currently recording command buffer. More...
 
void beginFrame ()
 Start rendering a single frame. More...
 
void endFrame ()
 End rendering a single frame. More...
 
bool isInFrame ()
 Returns true if currently rendering a frame. More...
 
bool beginRendering (RV_ImageOp img_op=RV_IMAGE_LOAD)
 
void endRendering ()
 End rendering. More...
 
bool isRendering ()
 
void resetRenderState ()
 Reset the cached render state in this object to Vulkan defaults. More...
 
RV_VKPipelineStateInfogetPipelineState ()
 Return the current pipeline State. More...
 
void resetPipeState ()
 Reset the pipeline state to Vulkan defaults. More...
 
void commitPipeState ()
 Send the current pipeline state to the GPU. More...
 
void pushPipeState ()
 
void popPipeState ()
 Restore the pipeline state from a previous pushPipeState(). More...
 
void setSampleMask (uint32 mask)
 Set the sample mask for multisample rendering. More...
 
void setColorMask (bool red, bool green, bool blue, bool alpha)
 Set the color channel mask. More...
 
void setCullMode (bool enable, bool back_face=true, bool is_ccw=true)
 Set the primitive culling mode, for backface or frontface culling. More...
 
void setLineWidth (float width)
 Set the width of line primitives (may not be supported on all platforms) More...
 
void setPolygonMode (RV_PolygonMode mode)
 
void setDepthState (bool enable, RE_ZFunction func=RE_ZLESS, bool writing=true, float near=0.0, float far=1.0, bool clamp=false)
 Set the depth state for zbuffer operations. More...
 
void setDepthBias (bool enable, float zconst, float zslope, float clamp=0.f)
 Set the polygon depth bias to reduce z-fighting for overlapping objects. More...
 
void setReverseDepth (bool reverse)
 
bool isReverseDepth () const
 Query if reverse depth mapping is enabled. More...
 
void setStencilEnable (bool enable)
 Enable stencil buffer rendering. Framebuffer must have a stencil buffer. More...
 
void setStencilTest (RE_SFunction func, uint8 ref, uint8 compare_mask, bool set_back=true)
 Define the stencil test. More...
 
void setStencilOp (RE_SOperation stencil_fail, RE_SOperation depth_fail, RE_SOperation pass, uint8 write_mask, bool set_back=true)
 
void setStencilBackTest (RE_SFunction func, uint8 ref, uint8 compare_mask)
 Define the stencil test for backfacing polygons. More...
 
void setStencilBackOp (RE_SOperation stencil_fail, RE_SOperation depth_fail, RE_SOperation pass, uint8 write_mask)
 Define the stencil operation for backfacing polygons. More...
 
void setViewport2DI (bool enable, const UT_DimRect &rect)
 Define the viewport for rendering. More...
 
void setScissor2DI (bool enable, const UT_DimRect &rect)
 Define the scissor (clip) area. More...
 
void setLogicOp (bool enable, RV_LogicOp=RV_LOGIC_NO_OP)
 Enable logic operations instead of color, plus the operation (AND,OR,etc) More...
 
void setBlendEnable (bool blend)
 Enable framebuffer blending. More...
 
void setBlendFunction (RE_BlendSourceFactor source_factor, RE_BlendDestFactor dest_factor)
 Set the blending weights for color and alpha. More...
 
void setColorBlendFunction (RE_BlendSourceFactor source_factor, RE_BlendDestFactor dest_factor)
 Set the blending weights for color only. More...
 
void setAlphaBlendFunction (RE_BlendSourceFactor source_factor, RE_BlendDestFactor dest_factor)
 Set the blending weights for alpha only. More...
 
void setBlendEquation (RE_BlendEquation eq)
 Set the blending operator (add, subtract, multiply, etc) More...
 
void clearDraws ()
 
void queueDraw (RV_Geometry *geo, int connect, int connect_num, const RV_OverrideList *override_list, int inst=-1)
 
void queueDraw (UT_UniquePtr< DrawTask > task)
 
void runDraws ()
 
void refreshBindings ()
 
bool prepareForDraw ()
 
RV_PushConstantsgetPushConstants ()
 
RV_ShaderVariableSetgetSet (int set_num)
 Return the bound variable set at index 'set_num'. More...
 
void unbindSet (int set_num)
 Remove a bound variable set by index. More...
 
void unbindSet (RV_ShaderVariableSet *set)
 Remove a bound variable set by object. More...
 
bool bindSet (RV_ShaderVariableSet *set, const RV_ShaderProgramBase *shr)
 Bind a variable set to the specific shader program. More...
 
void pushShader ()
 Store the current shader. More...
 
void pushShader (RV_ShaderProgramBase *sh)
 Store the current shader and set the new shader to 'sh'. More...
 
void popShader ()
 Restore the previous shader saved by pushShader() More...
 
void setShader (RV_ShaderProgramBase *sh)
 Set the current shader to 'sh'. More...
 
RV_ShaderProgramBasegetShader ()
 Get the current shader. More...
 
RV_ShaderComputegetComputeShader ()
 
RV_ShaderProgramgetGraphicsShader ()
 
void pushDrawFramebuffer ()
 Save the current render framebuffer. More...
 
void pushDrawFramebuffer (RV_Framebuffer *fb)
 Save the current render framebuffer and make a new framebuffer active. More...
 
void popDrawFramebuffer ()
 Restore the previously pushed framebuffer from pushDrawFramebuffer(). More...
 
void bindDrawFramebuffer (RV_Framebuffer *fb)
 Make a new framebuffer active. More...
 
RV_FramebuffergetDrawFramebuffer ()
 Get the current framebuffer (may be null) More...
 
const RV_OcclusionQuerygetQuery () const
 Return the currently active occlusion query. More...
 
void setQuery (RV_OcclusionQuery *q)
 Make occlusion query 'q' the active query (only 1 can be active at once) More...
 
void flush (bool wait_for_finish)
 
bool runCompute (int wg_x, int wg_y, int wg_z)
 
bool runComputeIndirect (RV_VKBuffer *buf, exint offset=0)
 
void draw (RV_Geometry *geo, int connect_index, const RV_OverrideList *override_list=nullptr)
 Draw the geometry 'geo' with the given connectivity group. More...
 
void drawInstanced (RV_Geometry *geo, int connect_index, int instance_group, const RV_OverrideList *override_list=nullptr)
 
void drawRange (RV_Geometry *geo, int connect_index, int connect_num, const RV_OverrideList *override_list=nullptr)
 Draw a range of connectivity groups. More...
 
void drawInstancedRange (RV_Geometry *geo, int connect_index, int connect_num, int inst_group, const RV_OverrideList *override_list=nullptr)
 Draw using instancing a range of connectivity groups. More...
 
void draw (UT_UniquePtr< DrawTask > task)
 Render a deferred draw task. More...
 
void addBufferBarrier (RV_BarrierScope scope, const VkBufferMemoryBarrier &barrier, RV_VKBuffer *buf)
 Add a barrier for buffer synchronization. More...
 
void addImageBarrier (RV_BarrierScope scope, const VkImageMemoryBarrier &barrier, RV_VKImage *img)
 Add a barrier for image synchronization. More...
 
void clearBarriers ()
 Remove all currently added barriers. More...
 
void executeAllBarriers ()
 Execute all commands with barriers. More...
 
void executeBarriers (RV_StageGroup stages)
 Execute all commands on some queues (graphics, compute, transfer). More...
 

Public Attributes

UT_Array< DrawStatemyRecordedDraws
 
bool myIsDeferring = false
 
UT_FixedArray< rv_BarrierMap,
RV_STAGE_NUM
myWaitingBarriers
 
UT_FixedArray< UT_Set
< RV_BarrierScope >
, RV_STAGE_NUM
myActiveBarriers
 
int myFrameExecBarrierCount = 0
 
int myFrameMemBarrierCount = 0
 

Detailed Description

Per-thread object for rendering Vulkan objects, which maintains the state and a cache of various Vulkan entities

Definition at line 63 of file RV_Render.h.

Member Typedef Documentation

Constructor & Destructor Documentation

RV_Render::RV_Render ( RV_Instance inst)
RV_Render::~RV_Render ( )
RV_Render::RV_Render ( const RV_Render )
delete
RV_Render::RV_Render ( RV_Render &&  )
delete

Member Function Documentation

void RV_Render::addBufferBarrier ( RV_BarrierScope  scope,
const VkBufferMemoryBarrier barrier,
RV_VKBuffer buf 
)

Add a barrier for buffer synchronization.

void RV_Render::addImageBarrier ( RV_BarrierScope  scope,
const VkImageMemoryBarrier barrier,
RV_VKImage img 
)

Add a barrier for image synchronization.

void RV_Render::beginFrame ( )

Start rendering a single frame.

bool RV_Render::beginRendering ( RV_ImageOp  img_op = RV_IMAGE_LOAD)

Begin rendering to the current framebuffer. 'img_op' can be LOAD (keep contents), CLEAR (discard and set to a constant) or DONT_CARE.

void RV_Render::bindDrawFramebuffer ( RV_Framebuffer fb)

Make a new framebuffer active.

bool RV_Render::bindSet ( RV_ShaderVariableSet set,
const RV_ShaderProgramBase shr 
)

Bind a variable set to the specific shader program.

void RV_Render::clearBarriers ( )

Remove all currently added barriers.

void RV_Render::clearDraws ( )
void RV_Render::commitPipeState ( )

Send the current pipeline state to the GPU.

VkDevice RV_Render::device ( )
inline

The raw vulkan device.

Definition at line 75 of file RV_Render.h.

void RV_Render::draw ( RV_Geometry geo,
int  connect_index,
const RV_OverrideList override_list = nullptr 
)

Draw the geometry 'geo' with the given connectivity group.

void RV_Render::draw ( UT_UniquePtr< DrawTask task)

Render a deferred draw task.

void RV_Render::drawInstanced ( RV_Geometry geo,
int  connect_index,
int  instance_group,
const RV_OverrideList override_list = nullptr 
)

Draw the geometry 'geo' with instancing with the given connectivity group abd given instance group

void RV_Render::drawInstancedRange ( RV_Geometry geo,
int  connect_index,
int  connect_num,
int  inst_group,
const RV_OverrideList override_list = nullptr 
)

Draw using instancing a range of connectivity groups.

void RV_Render::drawRange ( RV_Geometry geo,
int  connect_index,
int  connect_num,
const RV_OverrideList override_list = nullptr 
)

Draw a range of connectivity groups.

void RV_Render::endFrame ( )

End rendering a single frame.

void RV_Render::endRendering ( )

End rendering.

void RV_Render::executeAllBarriers ( )

Execute all commands with barriers.

void RV_Render::executeBarriers ( RV_StageGroup  stages)

Execute all commands on some queues (graphics, compute, transfer).

void RV_Render::flush ( bool  wait_for_finish)

End the current command buffer and start a new one. Wait until it is executed if 'wait_for_finish' is true.

RV_ShaderCompute* RV_Render::getComputeShader ( )

Get the current graphics shader. If the current shader is compute, return null.

RV_VKCommandBuffer* RV_Render::getCurrentCB ( )

The currently recording command buffer.

RV_Framebuffer* RV_Render::getDrawFramebuffer ( )

Get the current framebuffer (may be null)

RV_ShaderProgram* RV_Render::getGraphicsShader ( )

Get the current compute shader. If the current shader is graphics, return null.

RV_VKPipelineStateInfo* RV_Render::getPipelineState ( )
inline

Return the current pipeline State.

Definition at line 117 of file RV_Render.h.

RV_PushConstants& RV_Render::getPushConstants ( )
inline

Definition at line 315 of file RV_Render.h.

const RV_OcclusionQuery* RV_Render::getQuery ( ) const
inline

Return the currently active occlusion query.

Definition at line 364 of file RV_Render.h.

RV_ShaderVariableSet* RV_Render::getSet ( int  set_num)

Return the bound variable set at index 'set_num'.

RV_ShaderProgramBase* RV_Render::getShader ( )

Get the current shader.

RV_Instance* RV_Render::instance ( )
inline

The instance associated with this render.

Definition at line 73 of file RV_Render.h.

bool RV_Render::isInFrame ( )
inline

Returns true if currently rendering a frame.

Definition at line 90 of file RV_Render.h.

bool RV_Render::isRendering ( )

Query if Vulkan is rendering. Cannot upload buffers or textures while rendering.

bool RV_Render::isReverseDepth ( ) const
inline

Query if reverse depth mapping is enabled.

Definition at line 168 of file RV_Render.h.

void RV_Render::popDrawFramebuffer ( )

Restore the previously pushed framebuffer from pushDrawFramebuffer().

void RV_Render::popPipeState ( )

Restore the pipeline state from a previous pushPipeState().

void RV_Render::popShader ( )

Restore the previous shader saved by pushShader()

bool RV_Render::prepareForDraw ( )
void RV_Render::pushDrawFramebuffer ( )

Save the current render framebuffer.

void RV_Render::pushDrawFramebuffer ( RV_Framebuffer fb)

Save the current render framebuffer and make a new framebuffer active.

void RV_Render::pushPipeState ( )

Save the existing state so that the state can be modified, then restored to its previous state with popPipeState()

void RV_Render::pushShader ( )

Store the current shader.

void RV_Render::pushShader ( RV_ShaderProgramBase sh)

Store the current shader and set the new shader to 'sh'.

void RV_Render::queueDraw ( RV_Geometry geo,
int  connect,
int  connect_num,
const RV_OverrideList override_list,
int  inst = -1 
)
void RV_Render::queueDraw ( UT_UniquePtr< DrawTask task)
void RV_Render::refreshBindings ( )
void RV_Render::resetPipeState ( )

Reset the pipeline state to Vulkan defaults.

void RV_Render::resetRenderState ( )

Reset the cached render state in this object to Vulkan defaults.

bool RV_Render::runCompute ( int  wg_x,
int  wg_y,
int  wg_z 
)

Run the current compute shader with explicit workgroup sizes. Returns false if there is no compute shader bound.

bool RV_Render::runComputeIndirect ( RV_VKBuffer buf,
exint  offset = 0 
)

Run the current compute shader with workgroup sizes stored in the given buffer. Returns false if there is no compute shader bound.

void RV_Render::runDraws ( )
void RV_Render::setAlphaBlendFunction ( RE_BlendSourceFactor  source_factor,
RE_BlendDestFactor  dest_factor 
)

Set the blending weights for alpha only.

void RV_Render::setBlendEnable ( bool  blend)

Enable framebuffer blending.

void RV_Render::setBlendEquation ( RE_BlendEquation  eq)

Set the blending operator (add, subtract, multiply, etc)

void RV_Render::setBlendFunction ( RE_BlendSourceFactor  source_factor,
RE_BlendDestFactor  dest_factor 
)

Set the blending weights for color and alpha.

void RV_Render::setColorBlendFunction ( RE_BlendSourceFactor  source_factor,
RE_BlendDestFactor  dest_factor 
)

Set the blending weights for color only.

void RV_Render::setColorMask ( bool  red,
bool  green,
bool  blue,
bool  alpha 
)

Set the color channel mask.

void RV_Render::setCullMode ( bool  enable,
bool  back_face = true,
bool  is_ccw = true 
)

Set the primitive culling mode, for backface or frontface culling.

void RV_Render::setDepthBias ( bool  enable,
float  zconst,
float  zslope,
float  clamp = 0.f 
)

Set the polygon depth bias to reduce z-fighting for overlapping objects.

void RV_Render::setDepthState ( bool  enable,
RE_ZFunction  func = RE_ZLESS,
bool  writing = true,
float  near = 0.0,
float  far = 1.0,
bool  clamp = false 
)

Set the depth state for zbuffer operations.

void RV_Render::setLineWidth ( float  width)

Set the width of line primitives (may not be supported on all platforms)

void RV_Render::setLogicOp ( bool  enable,
RV_LogicOp  = RV_LOGIC_NO_OP 
)

Enable logic operations instead of color, plus the operation (AND,OR,etc)

void RV_Render::setPolygonMode ( RV_PolygonMode  mode)

Set the polygon draw mode - FILL (normal), LINES (outline), POINTS (vertices).

void RV_Render::setQuery ( RV_OcclusionQuery q)
inline

Make occlusion query 'q' the active query (only 1 can be active at once)

Definition at line 366 of file RV_Render.h.

void RV_Render::setReverseDepth ( bool  reverse)

Convenience method to map near to 1.0 and far to 0.0 so that the depth state will be converted to the correct comparisons (LESS -> GREATER)

void RV_Render::setSampleMask ( uint32  mask)

Set the sample mask for multisample rendering.

void RV_Render::setScissor2DI ( bool  enable,
const UT_DimRect rect 
)

Define the scissor (clip) area.

void RV_Render::setShader ( RV_ShaderProgramBase sh)

Set the current shader to 'sh'.

void RV_Render::setStencilBackOp ( RE_SOperation  stencil_fail,
RE_SOperation  depth_fail,
RE_SOperation  pass,
uint8  write_mask 
)

Define the stencil operation for backfacing polygons.

void RV_Render::setStencilBackTest ( RE_SFunction  func,
uint8  ref,
uint8  compare_mask 
)

Define the stencil test for backfacing polygons.

void RV_Render::setStencilEnable ( bool  enable)

Enable stencil buffer rendering. Framebuffer must have a stencil buffer.

void RV_Render::setStencilOp ( RE_SOperation  stencil_fail,
RE_SOperation  depth_fail,
RE_SOperation  pass,
uint8  write_mask,
bool  set_back = true 
)

Define the stencil operation based on the stencil test result. If 'set_back' is true, also set the same values for backfacing polygons.

void RV_Render::setStencilTest ( RE_SFunction  func,
uint8  ref,
uint8  compare_mask,
bool  set_back = true 
)

Define the stencil test.

void RV_Render::setViewport2DI ( bool  enable,
const UT_DimRect rect 
)

Define the viewport for rendering.

void RV_Render::unbindSet ( int  set_num)

Remove a bound variable set by index.

void RV_Render::unbindSet ( RV_ShaderVariableSet set)

Remove a bound variable set by object.

Member Data Documentation

UT_FixedArray<UT_Set<RV_BarrierScope>, RV_STAGE_NUM> RV_Render::myActiveBarriers

Definition at line 458 of file RV_Render.h.

int RV_Render::myFrameExecBarrierCount = 0

Definition at line 461 of file RV_Render.h.

int RV_Render::myFrameMemBarrierCount = 0

Definition at line 462 of file RV_Render.h.

bool RV_Render::myIsDeferring = false

Definition at line 296 of file RV_Render.h.

UT_Array<DrawState> RV_Render::myRecordedDraws

Definition at line 295 of file RV_Render.h.

UT_FixedArray<rv_BarrierMap, RV_STAGE_NUM> RV_Render::myWaitingBarriers

Definition at line 454 of file RV_Render.h.


The documentation for this class was generated from the following file: