107 lines
2.1 KiB
C++
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
|