Files
libsst/Include/ZRenderer/ZShaderParams.hpp
2026-04-03 00:22:39 -05:00

148 lines
3.4 KiB
C++

/*
ZShaderParams.hpp
Author: James Russell <jcrussell@762studios.com>
Created: 7/1/2012
Purpose:
Shader parameters class, to which uniform buffers and samplers are bound
and passed to draw calls. The attached buffers and samplers will be used
to provide data to the shader.
License:
TODO
*/
#pragma once
#ifndef _ZSHADERPARAMS_HPP
#define _ZSHADERPARAMS_HPP
#include <ZRenderer/ZDrawParams.hpp>
#include <ZSTL/ZSTL.hpp>
#include <ZUtil/ZUtil.hpp>
#include <ZRenderer/ZDataBuffer.hpp>
#include <ZRenderer/ZTexture.hpp>
#include <ZRenderer/ZSampler.hpp>
#ifndef ZSP_MAX_UNIFORM_BLOCKS
#define ZSP_MAX_UNIFORM_BLOCKS (128)
#endif
#ifndef ZSP_MAX_SAMPLERS
#define ZSP_MAX_SAMPLERS (32)
#endif
//Shader Parameters Structure, used to hold shader parameters
class ZShaderParams : public ZDrawParams
{
private:
DISABLE_COPY_AND_ASSIGN(ZShaderParams);
protected:
//A uniform block binding
struct UniformBlockBinding
{
ZName Name; //Name of the uniform block binding
ZPtr<ZDataBuffer> Buffer; //Parent buffer
ZPair<ZDataBuffer*, const ZDataBufferBlock*> Binding; //Pair Binding
};
//A sampler binding
struct SamplerBinding
{
ZName Name; //Name of the sampler binding
ZPtr<ZSampler> Sampler; //Sampler
ZPtr<ZTexture> Texture; //Texture
ZPair<ZSampler*, ZTexture*> Binding; //Pair binding
};
//These are the buffer bindings and samplers that are provided to the shader program
UniformBlockBinding UniformBlockBindings[ZSP_MAX_UNIFORM_BLOCKS];
SamplerBinding SamplerBindings[ZSP_MAX_SAMPLERS];
//Our current uniform block count and sampler count
size_t UniformBlockBindingCount;
size_t SamplerBindingCount;
public:
/*
Default Constructor.
*/
ZShaderParams();
virtual ~ZShaderParams() { }
/*
public ZShaderParams::ClearUniformBufferBlocks
Clears the current set of uniform buffer blocks.
@return (void)
@context (all)
*/
void ClearUniformBufferBlocks();
/*
public ZShaderParams::ClearSamplers
Clears the current set of sampler bindings.
@return (void)
@context (all)
*/
void ClearSamplers();
/*
public ZShaderParams::SetUniformBufferBlock
Sets the value of a uniform buffer block for a shader. Set to NULL using overload
to remove binding.
@param _name - the name of the uniform block in the shader
@param _buffer - the buffer containing the values
@param _block - the block definition for the buffer block
@return (void)
@context (all)
*/
void SetUniformBufferBlock(const ZName& _name, ZPtr<ZDataBuffer> _buffer, const ZDataBufferBlock* _block);
/*
public ZShaderParams::SetSampler
Sets the value of a sampler for a shader.
@param _name - the name of the sampler in the shader
@param _sampler - the sampler object to use
@param _texture - the texture the sampler object is a view onto
@return (void)
@context (all)
*/
void SetSampler(const ZName& _name, ZPtr<ZSampler> _sampler, ZPtr<ZTexture> _texture);
/*
The following methods are used by the renderer to get the values needed when
binding shader parameter values to pass to the shader program, to mark
all bound resources as contended, and release contention.
*/
const ZPair<ZDataBuffer*, const ZDataBufferBlock*>* GetUniformBlockByName(const ZName& _name);
const ZPair<ZSampler*, ZTexture*>* GetSamplerByName(const ZName& _name);
//Subclass Override
virtual void MarkResourcesContended();
//Subclass Override
virtual void ReleaseResourceContention();
};
#endif