raze/source/common/rendering/hwrenderer/data/hw_bonebuffer.h
Christoph Oelckers 6e49f0bf8f - Backend update from GZDoom.
Bone model support in GLES and ZScript quaternions.
2022-11-14 19:46:25 +01:00

46 lines
1.1 KiB
C++

#pragma once
#include "tarray.h"
#include "hwrenderer/data/buffers.h"
#include "common/utility/matrix.h"
#include <atomic>
#include <mutex>
class FRenderState;
class BoneBuffer
{
IDataBuffer *mBuffer;
IDataBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS];
int mPipelineNbr;
int mPipelinePos = 0;
bool mBufferType;
std::atomic<unsigned int> mIndex;
unsigned int mBlockAlign;
unsigned int mBlockSize;
unsigned int mBufferSize;
unsigned int mByteSize;
unsigned int mMaxUploadSize;
public:
BoneBuffer(int pipelineNbr = 1);
~BoneBuffer();
void Clear();
int UploadBones(const TArray<VSMatrix> &bones);
void Map() { mBuffer->Map(); }
void Unmap() { mBuffer->Unmap(); }
unsigned int GetBlockSize() const { return mBlockSize; }
bool GetBufferType() const { return mBufferType; }
int GetBinding(unsigned int index, size_t* pOffset, size_t* pSize);
// Only for GLES to determin how much data is in the buffer
int GetCurrentIndex() { return mIndex; };
// OpenGL needs the buffer to mess around with the binding.
IDataBuffer* GetBuffer() const
{
return mBuffer;
}
};