NAP
Public Member Functions | Public Attributes | List of all members
ComputeMaterial Class Reference

#include <material.h>

Public Member Functions

 ComputeMaterial (Core &core)
 
virtual bool init (utility::ErrorState &errorState) override
 
const ComputeShadergetShader () const
 
glm::uvec3 getWorkGroupSize () const
 
- Public Member Functions inherited from BaseMaterial
 BaseMaterial (Core &core)
 
virtual ~BaseMaterial ()=default
 
const BaseShadergetShader () const
 
- Public Member Functions inherited from Resource
 Resource ()
 
- Public Member Functions inherited from Object
 Object ()
 
virtual ~Object ()
 
virtual void onDestroy ()
 
 Object (Object &)=delete
 
Objectoperator= (const Object &)=delete
 
 Object (Object &&)=delete
 
Objectoperator= (Object &&)=delete
 
- Public Member Functions inherited from UniformContainer
 UniformContainer ()=default
 
virtual ~UniformContainer ()=default
 
 UniformContainer (const UniformContainer &)=delete
 
UniformContaineroperator= (const UniformContainer &)=delete
 
UniformStructInstancefindUniform (const std::string &name) const
 
SamplerInstancefindSampler (const std::string &name) const
 
BufferBindingInstancefindBinding (const std::string &name) const
 
ShaderConstantInstancefindConstant (const std::string &name) const
 
const SamplerInstanceListgetSamplers () const
 
const BufferBindingInstanceListgetBufferBindings () const
 
const ShaderConstantInstanceListgetConstants () const
 
const UniformStructInstanceListgetUniformStructs () const
 

Public Attributes

ResourcePtr< ComputeShadermShader = nullptr
 Property: 'Shader' The compute shader that this material is using. More...
 
- Public Attributes inherited from BaseMaterial
std::vector< ResourcePtr< UniformStruct > > mUniforms
 Property: 'Uniforms' Static uniforms (as read from file, or as set in code before calling init()) More...
 
std::vector< ResourcePtr< BufferBinding > > mBuffers
 Property: 'Buffers' Static buffer bindings (as read from file, or as set in code before calling init()) More...
 
std::vector< ResourcePtr< Sampler > > mSamplers
 Property: 'Samplers' Static samplers (as read from file, or as set in code before calling init()) More...
 
std::vector< ResourcePtr< ShaderConstant > > mConstants
 Property: 'Constants' Static constants (as read from file, or as set in code before calling init()) More...
 
- Public Attributes inherited from Object
std::string mID
 Property: 'mID' unique name of the object. Used as an identifier by the system. More...
 

Additional Inherited Members

- Public Types inherited from UniformContainer
using UniformStructInstanceList = std::vector< std::unique_ptr< UniformStructInstance > >
 
using BufferBindingInstanceList = std::vector< std::unique_ptr< BufferBindingInstance > >
 
using SamplerInstanceList = std::vector< std::unique_ptr< SamplerInstance > >
 
using ShaderConstantInstanceList = std::vector< std::unique_ptr< ShaderConstantInstance > >
 
- Static Public Member Functions inherited from Object
static bool isIDProperty (rtti::Instance &object, const rtti::Property &property)
 
- Protected Member Functions inherited from BaseMaterial
bool rebuild (const BaseShader &shader, utility::ErrorState &errorState)
 
- Protected Member Functions inherited from UniformContainer
UniformStructInstancecreateUniformRootStruct (const ShaderVariableStructDeclaration &declaration, const UniformCreatedCallback &uniformCreatedCallback)
 
BufferBindingInstanceaddBindingInstance (std::unique_ptr< BufferBindingInstance > instance)
 
SamplerInstanceaddSamplerInstance (std::unique_ptr< SamplerInstance > instance)
 
ShaderConstantInstanceaddConstantInstance (std::unique_ptr< ShaderConstantInstance > instance)
 

Description

Resource that acts as the main interface to a compute shader. Controls how GPU buffers are bound to shader inputs. It also creates and holds a set of uniform struct instances, matching those exposed by the shader. If a uniform exposed by this material is updated, all the objects rendered using this material will use that same value, unless overridden by a nap::ComputeMaterialInstance.

Unlike nap::Material, does not expose vertex attribute buffer bindings (or blend/depth modes). It is still possible to access a nap::VertexBuffer<T> in a compute shader through a nap::BufferBinding. This way, mesh data can remain static on the GPU, while being mutable in a compute shader.

Inheritance diagram for ComputeMaterial:
[legend]
Collaboration diagram for ComputeMaterial:
[legend]

Constructor & Destructor Documentation

◆ ComputeMaterial()

ComputeMaterial ( Core core)
Parameters
corethe core instance

Member Function Documentation

◆ getShader()

const ComputeShader& getShader ( ) const
Returns
The underlying compute shader

◆ getWorkGroupSize()

glm::uvec3 getWorkGroupSize ( ) const
Returns
the workgroup size

◆ init()

virtual bool init ( utility::ErrorState errorState)
overridevirtual

Initializes the compute material. Validates and converts all the declared shader variables into instances and sets up the vertex buffer bindings.

Parameters
errorStatecontains the error if initialization fails.
Returns
if initialization succeeded.

Reimplemented from Object.

Member Data Documentation

◆ mShader

ResourcePtr<ComputeShader> mShader = nullptr

Property: 'Shader' The compute shader that this material is using.