mirror of
https://github.com/beefytech/Beef.git
synced 2025-07-04 23:36:00 +02:00
Initial checkin
This commit is contained in:
parent
c74712dad9
commit
078564ac9e
3242 changed files with 1616395 additions and 0 deletions
118
BeefySysLib/gfx/DrawLayer.h
Normal file
118
BeefySysLib/gfx/DrawLayer.h
Normal file
|
@ -0,0 +1,118 @@
|
|||
#pragma once
|
||||
|
||||
#include "Common.h"
|
||||
#include "util/SLIList.h"
|
||||
#include "fbx/FBXReader.h"
|
||||
#include "gfx/RenderCmd.h"
|
||||
#include "gfx/RenderDevice.h"
|
||||
|
||||
NS_BF_BEGIN;
|
||||
|
||||
class RenderWindow;
|
||||
class Texture;
|
||||
class Shader;
|
||||
class ShaderPass;
|
||||
class BFApp;
|
||||
class Vertex3D;
|
||||
class DrawLayer;
|
||||
class RenderState;
|
||||
|
||||
#define MAX_TEXTURES 4
|
||||
|
||||
class DrawBatch : public RenderCmd
|
||||
{
|
||||
public:
|
||||
DrawLayer* mDrawLayer;
|
||||
int mId;
|
||||
|
||||
bool mIsVertexBufferHead;
|
||||
bool mIsIndexBufferHead;
|
||||
|
||||
void* mVertices;
|
||||
int mVtxSize;
|
||||
int mVtxIdx;
|
||||
int mAllocatedVertices;
|
||||
|
||||
uint16* mIndices;
|
||||
int mIdxIdx;
|
||||
int mAllocatedIndices;
|
||||
|
||||
Texture* mCurTextures[MAX_TEXTURES];
|
||||
|
||||
public:
|
||||
DrawBatch();
|
||||
virtual ~DrawBatch();
|
||||
|
||||
virtual void Free() override;
|
||||
|
||||
void Clear();
|
||||
DrawBatch* AllocateChainedBatch(int minVtxCount, int minIdxCount);
|
||||
virtual void* AllocTris(int vtxCount);
|
||||
virtual void* AllocStrip(int vtxCount);
|
||||
virtual void AllocIndexed(int vtxCount, int idxCount, void** verticesOut, uint16** indicesOut, uint16* idxOfsOut);
|
||||
};
|
||||
|
||||
#define DRAWBUFFER_CMDBUFFER_SIZE 64*1024
|
||||
|
||||
|
||||
|
||||
class DrawLayer
|
||||
{
|
||||
public:
|
||||
SLIList<RenderCmd*> mRenderCmdList;
|
||||
DrawBatch* mCurDrawBatch;
|
||||
|
||||
RenderWindow* mRenderWindow;
|
||||
RenderDevice* mRenderDevice;
|
||||
|
||||
void* mIdxBuffer;
|
||||
void* mVtxBuffer;
|
||||
void* mRenderCmdBuffer;
|
||||
int mIdxByteIdx;
|
||||
int mVtxByteIdx;
|
||||
int mRenderCmdByteIdx;
|
||||
|
||||
Texture* mCurTextures[MAX_TEXTURES];
|
||||
|
||||
public:
|
||||
template <typename T>
|
||||
T* AllocRenderCmd(int extraBytes = 0)
|
||||
{
|
||||
if (mRenderCmdByteIdx + sizeof(T) + extraBytes >= DRAWBUFFER_CMDBUFFER_SIZE)
|
||||
{
|
||||
mRenderCmdBuffer = mRenderDevice->mPooledRenderCmdBuffers.AllocMemoryBlock();
|
||||
T* cmd = new(mRenderCmdBuffer) T();
|
||||
cmd->mIsPoolHead = true;
|
||||
mRenderCmdByteIdx = sizeof(T) + extraBytes;
|
||||
return cmd;
|
||||
}
|
||||
|
||||
T* cmd = new((uint8*)mRenderCmdBuffer + mRenderCmdByteIdx) T();
|
||||
cmd->mIsPoolHead = false;
|
||||
mRenderCmdByteIdx += sizeof(T) + extraBytes;
|
||||
return cmd;
|
||||
}
|
||||
|
||||
public:
|
||||
void CloseDrawBatch();
|
||||
virtual DrawBatch* CreateDrawBatch() = 0;
|
||||
virtual DrawBatch* AllocateBatch(int minVtxCount, int minIdxCount);
|
||||
void QueueRenderCmd(RenderCmd* renderCmd);
|
||||
virtual RenderCmd* CreateSetTextureCmd(int textureIdx, Texture* texture) = 0;
|
||||
virtual void SetShaderConstantData(int slotIdx, void* constData, int size) = 0;
|
||||
virtual void SetShaderConstantDataTyped(int slotIdx, void* constData, int size, int* typeData, int typeCount);
|
||||
|
||||
public:
|
||||
DrawLayer();
|
||||
virtual ~DrawLayer();
|
||||
|
||||
virtual void Draw();
|
||||
virtual void Flush();
|
||||
virtual void Clear();
|
||||
virtual void* AllocTris(int vtxCount);
|
||||
virtual void* AllocStrip(int vtxCount);
|
||||
virtual void AllocIndexed(int vtxCount, int idxCount, void** verticesOut, uint16** indicesOut, uint16* idxOfsOut);
|
||||
virtual void SetTexture(int texIdx, Texture* texture);
|
||||
};
|
||||
|
||||
NS_BF_END;
|
Loading…
Add table
Add a link
Reference in a new issue