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

107 lines
2.1 KiB
C++

/*
ZVertexParams.hpp
Author: James Russell <jcrussell@762studios.com>
Created: 7/1/2012
Purpose:
TODO
License:
TODO
*/
#pragma once
#ifndef _ZVERTEXPARAMS_HPP
#define _ZVERTEXPARAMS_HPP
#include <ZRenderer/ZDrawParams.hpp>
#include <ZSTL/ZSTL.hpp>
#include <ZUtil/ZUtil.hpp>
#include <ZRenderer/ZDataBuffer.hpp>
#ifndef ZVP_MAX_STREAMS
#define ZVP_MAX_STREAMS (128)
#endif
class ZVertexParams : public ZDrawParams
{
private:
//A binding for a vertex stream
struct VertexStreamBinding
{
ZName Name; //Name of the stream attribute
ZPair<ZDataBuffer*, const ZDataBufferStream*> Binding; //Pair Binding
};
//This is the bound vertex buffer and streams
ZPtr<ZDataBuffer> VertexBuffer;
VertexStreamBinding VertexStreams[ZVP_MAX_STREAMS];
//Our current set number of streams
size_t CurrentStreamCount;
protected:
//Does this vertex parameter object need to be updated before rendered with?
bool Dirty;
public:
/*
Default Constructor.
*/
ZVertexParams();
/*
public ZVertexParams::ClearStreams
Clears the list of currently set streams.
@return (void)
@context (all)
*/
void ClearVertexStreams();
/*
public ZVertexParams::SetStream
Sets a vertex buffer stream. The vertex buffer provided to each call
of 'SetVertexStream' must be the same.
@param _name - the name of the stream binding
@param _vertexBuffer - the vertex buffer to bind streams from
@param _stream - the stream definition
@return (void)
@context (all)
*/
void SetVertexStream(const ZName& _name, ZPtr<ZDataBuffer> _vertexBuffer, const ZDataBufferStream* _stream);
/*
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 ZDataBufferStream*>* GetStreamByName(const ZName& _name);
ZDataBuffer* GetVertexBuffer();
bool IsDirty() const { return Dirty; }
size_t GetStreamCount() const { return CurrentStreamCount; }
//Subclass Override
virtual void MarkResourcesContended();
//Subclass Override
virtual void ReleaseResourceContention();
};
#endif