mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-03-13 06:22:07 +00:00
Remove virtual inheritance
This commit is contained in:
parent
ae72639853
commit
ca7e5be6b4
23 changed files with 102 additions and 141 deletions
|
@ -1216,15 +1216,14 @@ void F2DDrawer::OnFrameDone()
|
|||
|
||||
F2DVertexBuffer::F2DVertexBuffer()
|
||||
{
|
||||
mVertexBuffer = screen->CreateVertexBuffer();
|
||||
mIndexBuffer = screen->CreateIndexBuffer();
|
||||
|
||||
static const FVertexBufferAttribute format[] = {
|
||||
{ 0, VATTR_VERTEX, VFmt_Float3, (int)myoffsetof(F2DDrawer::TwoDVertex, x) },
|
||||
{ 0, VATTR_TEXCOORD, VFmt_Float2, (int)myoffsetof(F2DDrawer::TwoDVertex, u) },
|
||||
{ 0, VATTR_COLOR, VFmt_Byte4, (int)myoffsetof(F2DDrawer::TwoDVertex, color0) }
|
||||
};
|
||||
mVertexBuffer->SetFormat(1, 3, sizeof(F2DDrawer::TwoDVertex), format);
|
||||
|
||||
mVertexBuffer = screen->CreateVertexBuffer(1, 3, sizeof(F2DDrawer::TwoDVertex), format);
|
||||
mIndexBuffer = screen->CreateIndexBuffer();
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
|
|
@ -331,8 +331,8 @@ public:
|
|||
|
||||
class F2DVertexBuffer
|
||||
{
|
||||
IVertexBuffer *mVertexBuffer;
|
||||
IIndexBuffer *mIndexBuffer;
|
||||
IBuffer* mVertexBuffer;
|
||||
IBuffer* mIndexBuffer;
|
||||
|
||||
|
||||
public:
|
||||
|
@ -351,7 +351,7 @@ public:
|
|||
mIndexBuffer->SetData(indexcount * sizeof(unsigned int), indices, BufferUsageType::Stream);
|
||||
}
|
||||
|
||||
std::pair<IVertexBuffer *, IIndexBuffer *> GetBufferObjects() const
|
||||
std::pair<IBuffer*, IBuffer*> GetBufferObjects() const
|
||||
{
|
||||
return std::make_pair(mVertexBuffer, mIndexBuffer);
|
||||
}
|
||||
|
|
|
@ -81,22 +81,3 @@ public:
|
|||
void *Memory() { return map; }
|
||||
size_t Size() { return buffersize; }
|
||||
};
|
||||
|
||||
class IVertexBuffer : virtual public IBuffer
|
||||
{
|
||||
public:
|
||||
virtual void SetFormat(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute *attrs) = 0;
|
||||
};
|
||||
|
||||
// This merely exists to have a dedicated type for index buffers to inherit from.
|
||||
class IIndexBuffer : virtual public IBuffer
|
||||
{
|
||||
// Element size is fixed to 4, thanks to OpenGL requiring this info to be coded into the glDrawElements call.
|
||||
// This mostly prohibits a more flexible buffer setup but GZDoom doesn't use any other format anyway.
|
||||
// Ob Vulkam, element size is a buffer property and of no concern to the drawing functions (as it should be.)
|
||||
};
|
||||
|
||||
class IDataBuffer : virtual public IBuffer
|
||||
{
|
||||
// Can be either uniform or shader storage buffer, depending on its needs.
|
||||
};
|
||||
|
|
|
@ -85,18 +85,15 @@ FFlatVertexBuffer::FFlatVertexBuffer(DFrameBuffer* fb, int width, int height, in
|
|||
|
||||
for (int n = 0; n < mPipelineNbr; n++)
|
||||
{
|
||||
mVertexBufferPipeline[n] = fb->CreateVertexBuffer();
|
||||
|
||||
unsigned int bytesize = BUFFER_SIZE * sizeof(FFlatVertex);
|
||||
mVertexBufferPipeline[n]->SetData(bytesize, nullptr, BufferUsageType::Persistent);
|
||||
|
||||
static const FVertexBufferAttribute format[] = {
|
||||
static const FVertexBufferAttribute format[] =
|
||||
{
|
||||
{ 0, VATTR_VERTEX, VFmt_Float3, (int)myoffsetof(FFlatVertex, x) },
|
||||
{ 0, VATTR_TEXCOORD, VFmt_Float2, (int)myoffsetof(FFlatVertex, u) },
|
||||
{ 0, VATTR_LIGHTMAP, VFmt_Float3, (int)myoffsetof(FFlatVertex, lu) },
|
||||
};
|
||||
|
||||
mVertexBufferPipeline[n]->SetFormat(1, 3, sizeof(FFlatVertex), format);
|
||||
mVertexBufferPipeline[n] = fb->CreateVertexBuffer(1, 3, sizeof(FFlatVertex), format);
|
||||
mVertexBufferPipeline[n]->SetData(BUFFER_SIZE * sizeof(FFlatVertex), nullptr, BufferUsageType::Persistent);
|
||||
}
|
||||
|
||||
mVertexBuffer = mVertexBufferPipeline[mPipelinePos];
|
||||
|
@ -165,7 +162,7 @@ std::pair<FFlatVertex *, unsigned int> FFlatVertexBuffer::AllocVertices(unsigned
|
|||
|
||||
void FFlatVertexBuffer::Copy(int start, int count)
|
||||
{
|
||||
IVertexBuffer* old = mVertexBuffer;
|
||||
IBuffer* old = mVertexBuffer;
|
||||
|
||||
for (int n = 0; n < mPipelineNbr; n++)
|
||||
{
|
||||
|
|
|
@ -65,9 +65,9 @@ public:
|
|||
int mPipelineNbr;
|
||||
int mPipelinePos = 0;
|
||||
|
||||
IVertexBuffer* mVertexBuffer;
|
||||
IVertexBuffer *mVertexBufferPipeline[HW_MAX_PIPELINE_BUFFERS];
|
||||
IIndexBuffer *mIndexBuffer;
|
||||
IBuffer* mVertexBuffer;
|
||||
IBuffer* mVertexBufferPipeline[HW_MAX_PIPELINE_BUFFERS];
|
||||
IBuffer* mIndexBuffer;
|
||||
|
||||
|
||||
|
||||
|
@ -96,7 +96,7 @@ public:
|
|||
~FFlatVertexBuffer();
|
||||
|
||||
void OutputResized(int width, int height);
|
||||
std::pair<IVertexBuffer *, IIndexBuffer *> GetBufferObjects() const
|
||||
std::pair<IBuffer*, IBuffer*> GetBufferObjects() const
|
||||
{
|
||||
return std::make_pair(mVertexBuffer, mIndexBuffer);
|
||||
}
|
||||
|
|
|
@ -12,8 +12,8 @@ class FRenderState;
|
|||
class BoneBuffer
|
||||
{
|
||||
DFrameBuffer* fb = nullptr;
|
||||
IDataBuffer *mBuffer;
|
||||
IDataBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS];
|
||||
IBuffer *mBuffer;
|
||||
IBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS];
|
||||
int mPipelineNbr;
|
||||
int mPipelinePos = 0;
|
||||
|
||||
|
@ -41,7 +41,7 @@ public:
|
|||
int GetCurrentIndex() { return mIndex; };
|
||||
|
||||
// OpenGL needs the buffer to mess around with the binding.
|
||||
IDataBuffer* GetBuffer() const
|
||||
IBuffer* GetBuffer() const
|
||||
{
|
||||
return mBuffer;
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@ class FRenderState;
|
|||
class FLightBuffer
|
||||
{
|
||||
DFrameBuffer* fb = nullptr;
|
||||
IDataBuffer *mBuffer;
|
||||
IDataBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS];
|
||||
IBuffer* mBuffer;
|
||||
IBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS];
|
||||
int mPipelineNbr;
|
||||
int mPipelinePos = 0;
|
||||
|
||||
|
@ -41,7 +41,7 @@ public:
|
|||
int GetBinding(unsigned int index, size_t* pOffset, size_t* pSize);
|
||||
|
||||
// OpenGL needs the buffer to mess around with the binding.
|
||||
IDataBuffer* GetBuffer() const
|
||||
IBuffer* GetBuffer() const
|
||||
{
|
||||
return mBuffer;
|
||||
}
|
||||
|
|
|
@ -39,10 +39,8 @@
|
|||
|
||||
FModelVertexBuffer::FModelVertexBuffer(bool needindex, bool singleframe)
|
||||
{
|
||||
mVertexBuffer = screen->CreateVertexBuffer();
|
||||
mIndexBuffer = needindex ? screen->CreateIndexBuffer() : nullptr;
|
||||
|
||||
static const FVertexBufferAttribute format[] = {
|
||||
static const FVertexBufferAttribute format[] =
|
||||
{
|
||||
{ 0, VATTR_VERTEX, VFmt_Float3, (int)myoffsetof(FModelVertex, x) },
|
||||
{ 0, VATTR_TEXCOORD, VFmt_Float2, (int)myoffsetof(FModelVertex, u) },
|
||||
{ 0, VATTR_NORMAL, VFmt_Packed_A2R10G10B10, (int)myoffsetof(FModelVertex, packedNormal) },
|
||||
|
@ -52,7 +50,9 @@ FModelVertexBuffer::FModelVertexBuffer(bool needindex, bool singleframe)
|
|||
{ 1, VATTR_VERTEX2, VFmt_Float3, (int)myoffsetof(FModelVertex, x) },
|
||||
{ 1, VATTR_NORMAL2, VFmt_Packed_A2R10G10B10, (int)myoffsetof(FModelVertex, packedNormal) }
|
||||
};
|
||||
mVertexBuffer->SetFormat(2, 8, sizeof(FModelVertex), format);
|
||||
|
||||
mVertexBuffer = screen->CreateVertexBuffer(2, 8, sizeof(FModelVertex), format);
|
||||
mIndexBuffer = needindex ? screen->CreateIndexBuffer() : nullptr;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
|
|
@ -7,8 +7,8 @@ class FModelRenderer;
|
|||
|
||||
class FModelVertexBuffer : public IModelVertexBuffer
|
||||
{
|
||||
IVertexBuffer *mVertexBuffer;
|
||||
IIndexBuffer *mIndexBuffer;
|
||||
IBuffer* mVertexBuffer;
|
||||
IBuffer* mIndexBuffer;
|
||||
|
||||
public:
|
||||
|
||||
|
@ -21,6 +21,6 @@ public:
|
|||
unsigned int *LockIndexBuffer(unsigned int size) override;
|
||||
void UnlockIndexBuffer() override;
|
||||
|
||||
IVertexBuffer* vertexBuffer() const { return mVertexBuffer; }
|
||||
IIndexBuffer* indexBuffer() const { return mIndexBuffer; }
|
||||
IBuffer* vertexBuffer() const { return mVertexBuffer; }
|
||||
IBuffer* indexBuffer() const { return mIndexBuffer; }
|
||||
};
|
||||
|
|
|
@ -8,8 +8,7 @@
|
|||
#include "i_interface.h"
|
||||
|
||||
struct FColormap;
|
||||
class IVertexBuffer;
|
||||
class IIndexBuffer;
|
||||
class IBuffer;
|
||||
|
||||
enum EClearTarget
|
||||
{
|
||||
|
@ -240,9 +239,9 @@ protected:
|
|||
FMaterialState mMaterial;
|
||||
FDepthBiasState mBias;
|
||||
|
||||
IVertexBuffer *mVertexBuffer;
|
||||
IBuffer* mVertexBuffer;
|
||||
int mVertexOffsets[2]; // one per binding point
|
||||
IIndexBuffer *mIndexBuffer;
|
||||
IBuffer* mIndexBuffer;
|
||||
|
||||
EPassType mPassType = NORMAL_PASS;
|
||||
|
||||
|
@ -657,7 +656,7 @@ public:
|
|||
mClipSplit[1] = 1000000.f;
|
||||
}
|
||||
|
||||
void SetVertexBuffer(IVertexBuffer *vb, int offset0, int offset1)
|
||||
void SetVertexBuffer(IBuffer* vb, int offset0, int offset1)
|
||||
{
|
||||
assert(vb);
|
||||
mVertexBuffer = vb;
|
||||
|
@ -665,7 +664,7 @@ public:
|
|||
mVertexOffsets[1] = offset1;
|
||||
}
|
||||
|
||||
void SetIndexBuffer(IIndexBuffer *ib)
|
||||
void SetIndexBuffer(IBuffer* ib)
|
||||
{
|
||||
mIndexBuffer = ib;
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include <memory>
|
||||
#include <functional>
|
||||
|
||||
class IDataBuffer;
|
||||
class IBuffer;
|
||||
class DFrameBuffer;
|
||||
|
||||
class ShadowMap
|
||||
|
@ -84,11 +84,11 @@ protected:
|
|||
// OpenGL storage buffer with the list of lights in the shadow map texture
|
||||
// These buffers need to be accessed by the OpenGL backend directly so that they can be bound.
|
||||
public:
|
||||
IDataBuffer *mLightList = nullptr;
|
||||
IBuffer* mLightList = nullptr;
|
||||
|
||||
// OpenGL storage buffers for the AABB tree
|
||||
IDataBuffer *mNodesBuffer = nullptr;
|
||||
IDataBuffer *mLinesBuffer = nullptr;
|
||||
IBuffer* mNodesBuffer = nullptr;
|
||||
IBuffer* mLinesBuffer = nullptr;
|
||||
|
||||
std::function<void()> CollectLights = nullptr;
|
||||
|
||||
|
|
|
@ -122,7 +122,6 @@ std::pair<PalEntry, PalEntry>& R_GetSkyCapColor(FGameTexture* tex)
|
|||
FSkyVertexBuffer::FSkyVertexBuffer(DFrameBuffer* fb) : fb(fb)
|
||||
{
|
||||
CreateDome();
|
||||
mVertexBuffer = fb->CreateVertexBuffer();
|
||||
|
||||
static const FVertexBufferAttribute format[] = {
|
||||
{ 0, VATTR_VERTEX, VFmt_Float3, (int)myoffsetof(FSkyVertex, x) },
|
||||
|
@ -130,7 +129,7 @@ FSkyVertexBuffer::FSkyVertexBuffer(DFrameBuffer* fb) : fb(fb)
|
|||
{ 0, VATTR_COLOR, VFmt_Byte4, (int)myoffsetof(FSkyVertex, color) },
|
||||
{ 0, VATTR_LIGHTMAP, VFmt_Float3, (int)myoffsetof(FSkyVertex, lu) },
|
||||
};
|
||||
mVertexBuffer->SetFormat(1, 4, sizeof(FSkyVertex), format);
|
||||
mVertexBuffer = fb->CreateVertexBuffer(1, 4, sizeof(FSkyVertex), format);
|
||||
mVertexBuffer->SetData(mVertices.Size() * sizeof(FSkyVertex), &mVertices[0], BufferUsageType::Static);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
class DFrameBuffer;
|
||||
class FGameTexture;
|
||||
class FRenderState;
|
||||
class IVertexBuffer;
|
||||
class IBuffer;
|
||||
struct HWSkyPortal;
|
||||
struct HWDrawInfo;
|
||||
|
||||
|
@ -63,7 +63,7 @@ public:
|
|||
SKYMODE_FOGLAYER = 2
|
||||
};
|
||||
|
||||
IVertexBuffer *mVertexBuffer;
|
||||
IBuffer* mVertexBuffer;
|
||||
|
||||
TArray<FSkyVertex> mVertices;
|
||||
TArray<unsigned int> mPrimStartDoom;
|
||||
|
@ -86,7 +86,7 @@ public:
|
|||
FSkyVertexBuffer(DFrameBuffer* fb);
|
||||
~FSkyVertexBuffer();
|
||||
void SetupMatrices(FGameTexture *tex, float x_offset, float y_offset, bool mirror, int mode, VSMatrix &modelmatrix, VSMatrix &textureMatrix, bool tiled, float xscale = 0, float vertscale = 0);
|
||||
std::pair<IVertexBuffer *, IIndexBuffer *> GetBufferObjects() const
|
||||
std::pair<IBuffer*, IBuffer*> GetBufferObjects() const
|
||||
{
|
||||
return std::make_pair(mVertexBuffer, nullptr);
|
||||
}
|
||||
|
|
|
@ -9,8 +9,8 @@ class FRenderState;
|
|||
class HWViewpointBuffer
|
||||
{
|
||||
DFrameBuffer* fb = nullptr;
|
||||
IDataBuffer *mBuffer;
|
||||
IDataBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS];
|
||||
IBuffer* mBuffer;
|
||||
IBuffer* mBufferPipeline[HW_MAX_PIPELINE_BUFFERS];
|
||||
int mPipelineNbr;
|
||||
int mPipelinePos = 0;
|
||||
|
||||
|
|
|
@ -50,9 +50,7 @@
|
|||
|
||||
struct FPortalSceneState;
|
||||
class FSkyVertexBuffer;
|
||||
class IIndexBuffer;
|
||||
class IVertexBuffer;
|
||||
class IDataBuffer;
|
||||
class IBuffer;
|
||||
class FFlatVertexBuffer;
|
||||
class HWViewpointBuffer;
|
||||
class FLightBuffer;
|
||||
|
@ -94,6 +92,7 @@ struct FColormap;
|
|||
enum FTextureFormat : uint32_t;
|
||||
class FModelRenderer;
|
||||
struct SamplerUniform;
|
||||
struct FVertexBufferAttribute;
|
||||
|
||||
//
|
||||
// VIDEO
|
||||
|
@ -236,17 +235,17 @@ public:
|
|||
virtual void InitLightmap(int LMTextureSize, int LMTextureCount, TArray<uint16_t>& LMTextureData) {}
|
||||
|
||||
// Interface to hardware rendering resources
|
||||
virtual IVertexBuffer* CreateVertexBuffer() { return nullptr; }
|
||||
virtual IIndexBuffer* CreateIndexBuffer() { return nullptr; }
|
||||
virtual IBuffer* CreateVertexBuffer(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute* attrs) { return nullptr; }
|
||||
virtual IBuffer* CreateIndexBuffer() { return nullptr; }
|
||||
bool BuffersArePersistent() { return !!(hwcaps & RFL_BUFFER_STORAGE); }
|
||||
|
||||
// To do: these buffers shouldn't be created by the hwrenderer layer - it will be simpler if the backend manages them completely
|
||||
virtual IDataBuffer* CreateLightBuffer() { return nullptr; }
|
||||
virtual IDataBuffer* CreateBoneBuffer() { return nullptr; }
|
||||
virtual IDataBuffer* CreateViewpointBuffer() { return nullptr; }
|
||||
virtual IDataBuffer* CreateShadowmapNodesBuffer() { return nullptr; }
|
||||
virtual IDataBuffer* CreateShadowmapLinesBuffer() { return nullptr; }
|
||||
virtual IDataBuffer* CreateShadowmapLightsBuffer() { return nullptr; }
|
||||
virtual IBuffer* CreateLightBuffer() { return nullptr; }
|
||||
virtual IBuffer* CreateBoneBuffer() { return nullptr; }
|
||||
virtual IBuffer* CreateViewpointBuffer() { return nullptr; }
|
||||
virtual IBuffer* CreateShadowmapNodesBuffer() { return nullptr; }
|
||||
virtual IBuffer* CreateShadowmapLinesBuffer() { return nullptr; }
|
||||
virtual IBuffer* CreateShadowmapLightsBuffer() { return nullptr; }
|
||||
|
||||
// This is overridable in case Vulkan does it differently.
|
||||
virtual bool RenderTextureIsFlipped() const
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "vk_hwbuffer.h"
|
||||
#include "vk_streambuffer.h"
|
||||
#include "vulkan/vk_renderdevice.h"
|
||||
#include "vulkan/pipelines/vk_renderpass.h"
|
||||
|
||||
VkBufferManager::VkBufferManager(VulkanRenderDevice* fb) : fb(fb)
|
||||
{
|
||||
|
@ -64,47 +65,47 @@ void VkBufferManager::RemoveBuffer(VkHardwareBuffer* buffer)
|
|||
}
|
||||
}
|
||||
|
||||
IVertexBuffer* VkBufferManager::CreateVertexBuffer()
|
||||
IBuffer* VkBufferManager::CreateVertexBuffer(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute* attrs)
|
||||
{
|
||||
return new VkHardwareVertexBuffer(fb);
|
||||
return new VkHardwareVertexBuffer(fb, fb->GetRenderPassManager()->GetVertexFormat(numBindingPoints, numAttributes, stride, attrs));
|
||||
}
|
||||
|
||||
IIndexBuffer* VkBufferManager::CreateIndexBuffer()
|
||||
IBuffer* VkBufferManager::CreateIndexBuffer()
|
||||
{
|
||||
return new VkHardwareIndexBuffer(fb);
|
||||
}
|
||||
|
||||
IDataBuffer* VkBufferManager::CreateLightBuffer()
|
||||
IBuffer* VkBufferManager::CreateLightBuffer()
|
||||
{
|
||||
LightBufferSSO = new VkHardwareDataBuffer(fb, true, false);
|
||||
return LightBufferSSO;
|
||||
}
|
||||
|
||||
IDataBuffer* VkBufferManager::CreateBoneBuffer()
|
||||
IBuffer* VkBufferManager::CreateBoneBuffer()
|
||||
{
|
||||
BoneBufferSSO = new VkHardwareDataBuffer(fb, true, false);
|
||||
return BoneBufferSSO;
|
||||
}
|
||||
|
||||
IDataBuffer* VkBufferManager::CreateViewpointBuffer()
|
||||
IBuffer* VkBufferManager::CreateViewpointBuffer()
|
||||
{
|
||||
ViewpointUBO = new VkHardwareDataBuffer(fb, false, true);
|
||||
return ViewpointUBO;
|
||||
}
|
||||
|
||||
IDataBuffer* VkBufferManager::CreateShadowmapNodesBuffer()
|
||||
IBuffer* VkBufferManager::CreateShadowmapNodesBuffer()
|
||||
{
|
||||
LightNodes = new VkHardwareDataBuffer(fb, true, false);
|
||||
return LightNodes;
|
||||
}
|
||||
|
||||
IDataBuffer* VkBufferManager::CreateShadowmapLinesBuffer()
|
||||
IBuffer* VkBufferManager::CreateShadowmapLinesBuffer()
|
||||
{
|
||||
LightLines = new VkHardwareDataBuffer(fb, true, false);
|
||||
return LightLines;
|
||||
}
|
||||
|
||||
IDataBuffer* VkBufferManager::CreateShadowmapLightsBuffer()
|
||||
IBuffer* VkBufferManager::CreateShadowmapLightsBuffer()
|
||||
{
|
||||
LightList = new VkHardwareDataBuffer(fb, true, false);
|
||||
return LightList;
|
||||
|
|
|
@ -8,9 +8,8 @@ class VulkanRenderDevice;
|
|||
class VkHardwareBuffer;
|
||||
class VkHardwareDataBuffer;
|
||||
class VkStreamBuffer;
|
||||
class IIndexBuffer;
|
||||
class IVertexBuffer;
|
||||
class IDataBuffer;
|
||||
class IBuffer;
|
||||
struct FVertexBufferAttribute;
|
||||
|
||||
class VkBufferManager
|
||||
{
|
||||
|
@ -21,15 +20,15 @@ public:
|
|||
void Init();
|
||||
void Deinit();
|
||||
|
||||
IVertexBuffer* CreateVertexBuffer();
|
||||
IIndexBuffer* CreateIndexBuffer();
|
||||
IBuffer* CreateVertexBuffer(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute* attrs);
|
||||
IBuffer* CreateIndexBuffer();
|
||||
|
||||
IDataBuffer* CreateLightBuffer();
|
||||
IDataBuffer* CreateBoneBuffer();
|
||||
IDataBuffer* CreateViewpointBuffer();
|
||||
IDataBuffer* CreateShadowmapNodesBuffer();
|
||||
IDataBuffer* CreateShadowmapLinesBuffer();
|
||||
IDataBuffer* CreateShadowmapLightsBuffer();
|
||||
IBuffer* CreateLightBuffer();
|
||||
IBuffer* CreateBoneBuffer();
|
||||
IBuffer* CreateViewpointBuffer();
|
||||
IBuffer* CreateShadowmapNodesBuffer();
|
||||
IBuffer* CreateShadowmapLinesBuffer();
|
||||
IBuffer* CreateShadowmapLightsBuffer();
|
||||
|
||||
void AddBuffer(VkHardwareBuffer* buffer);
|
||||
void RemoveBuffer(VkHardwareBuffer* buffer);
|
||||
|
@ -44,7 +43,7 @@ public:
|
|||
std::unique_ptr<VkStreamBuffer> MatrixBuffer;
|
||||
std::unique_ptr<VkStreamBuffer> StreamBuffer;
|
||||
|
||||
std::unique_ptr<IIndexBuffer> FanToTrisIndexBuffer;
|
||||
std::unique_ptr<IBuffer> FanToTrisIndexBuffer;
|
||||
|
||||
private:
|
||||
void CreateFanToTrisIndexBuffer();
|
||||
|
|
|
@ -236,10 +236,3 @@ void VkHardwareBuffer::Unlock()
|
|||
map = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void VkHardwareVertexBuffer::SetFormat(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute *attrs)
|
||||
{
|
||||
VertexFormat = fb->GetRenderPassManager()->GetVertexFormat(numBindingPoints, numAttributes, stride, attrs);
|
||||
}
|
||||
|
|
|
@ -5,15 +5,9 @@
|
|||
#include "tarray.h"
|
||||
#include <list>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// silence bogus warning C4250: 'VkHardwareVertexBuffer': inherits 'VkHardwareBuffer::VkHardwareBuffer::SetData' via dominance
|
||||
// According to internet infos, the warning is erroneously emitted in this case.
|
||||
#pragma warning(disable:4250)
|
||||
#endif
|
||||
|
||||
class VulkanRenderDevice;
|
||||
|
||||
class VkHardwareBuffer : virtual public IBuffer
|
||||
class VkHardwareBuffer : public IBuffer
|
||||
{
|
||||
public:
|
||||
VkHardwareBuffer(VulkanRenderDevice* fb);
|
||||
|
@ -41,22 +35,21 @@ public:
|
|||
TArray<uint8_t> mStaticUpload;
|
||||
};
|
||||
|
||||
class VkHardwareVertexBuffer : public IVertexBuffer, public VkHardwareBuffer
|
||||
class VkHardwareVertexBuffer : public VkHardwareBuffer
|
||||
{
|
||||
public:
|
||||
VkHardwareVertexBuffer(VulkanRenderDevice* fb) : VkHardwareBuffer(fb) { mBufferType = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; }
|
||||
void SetFormat(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute *attrs) override;
|
||||
VkHardwareVertexBuffer(VulkanRenderDevice* fb, int vertexFormat) : VkHardwareBuffer(fb), VertexFormat(vertexFormat) { mBufferType = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; }
|
||||
|
||||
int VertexFormat = -1;
|
||||
};
|
||||
|
||||
class VkHardwareIndexBuffer : public IIndexBuffer, public VkHardwareBuffer
|
||||
class VkHardwareIndexBuffer : public VkHardwareBuffer
|
||||
{
|
||||
public:
|
||||
VkHardwareIndexBuffer(VulkanRenderDevice* fb) : VkHardwareBuffer(fb) { mBufferType = VK_BUFFER_USAGE_INDEX_BUFFER_BIT; }
|
||||
};
|
||||
|
||||
class VkHardwareDataBuffer : public IDataBuffer, public VkHardwareBuffer
|
||||
class VkHardwareDataBuffer : public VkHardwareBuffer
|
||||
{
|
||||
public:
|
||||
VkHardwareDataBuffer(VulkanRenderDevice* fb, bool ssbo, bool needresize) : VkHardwareBuffer(fb)
|
||||
|
|
|
@ -312,42 +312,42 @@ FMaterial* VulkanRenderDevice::CreateMaterial(FGameTexture* tex, int scaleflags)
|
|||
return new VkMaterial(this, tex, scaleflags);
|
||||
}
|
||||
|
||||
IVertexBuffer *VulkanRenderDevice::CreateVertexBuffer()
|
||||
IBuffer*VulkanRenderDevice::CreateVertexBuffer(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute* attrs)
|
||||
{
|
||||
return GetBufferManager()->CreateVertexBuffer();
|
||||
return GetBufferManager()->CreateVertexBuffer(numBindingPoints, numAttributes, stride, attrs);
|
||||
}
|
||||
|
||||
IIndexBuffer *VulkanRenderDevice::CreateIndexBuffer()
|
||||
IBuffer*VulkanRenderDevice::CreateIndexBuffer()
|
||||
{
|
||||
return GetBufferManager()->CreateIndexBuffer();
|
||||
}
|
||||
|
||||
IDataBuffer* VulkanRenderDevice::CreateLightBuffer()
|
||||
IBuffer* VulkanRenderDevice::CreateLightBuffer()
|
||||
{
|
||||
return GetBufferManager()->CreateLightBuffer();
|
||||
}
|
||||
|
||||
IDataBuffer* VulkanRenderDevice::CreateBoneBuffer()
|
||||
IBuffer* VulkanRenderDevice::CreateBoneBuffer()
|
||||
{
|
||||
return GetBufferManager()->CreateBoneBuffer();
|
||||
}
|
||||
|
||||
IDataBuffer* VulkanRenderDevice::CreateViewpointBuffer()
|
||||
IBuffer* VulkanRenderDevice::CreateViewpointBuffer()
|
||||
{
|
||||
return GetBufferManager()->CreateViewpointBuffer();
|
||||
}
|
||||
|
||||
IDataBuffer* VulkanRenderDevice::CreateShadowmapNodesBuffer()
|
||||
IBuffer* VulkanRenderDevice::CreateShadowmapNodesBuffer()
|
||||
{
|
||||
return GetBufferManager()->CreateShadowmapNodesBuffer();
|
||||
}
|
||||
|
||||
IDataBuffer* VulkanRenderDevice::CreateShadowmapLinesBuffer()
|
||||
IBuffer* VulkanRenderDevice::CreateShadowmapLinesBuffer()
|
||||
{
|
||||
return GetBufferManager()->CreateShadowmapLinesBuffer();
|
||||
}
|
||||
|
||||
IDataBuffer* VulkanRenderDevice::CreateShadowmapLightsBuffer()
|
||||
IBuffer* VulkanRenderDevice::CreateShadowmapLightsBuffer()
|
||||
{
|
||||
return GetBufferManager()->CreateShadowmapLightsBuffer();
|
||||
}
|
||||
|
|
|
@ -72,15 +72,16 @@ public:
|
|||
|
||||
IHardwareTexture *CreateHardwareTexture(int numchannels) override;
|
||||
FMaterial* CreateMaterial(FGameTexture* tex, int scaleflags) override;
|
||||
IVertexBuffer *CreateVertexBuffer() override;
|
||||
IIndexBuffer *CreateIndexBuffer() override;
|
||||
|
||||
IDataBuffer* CreateLightBuffer() override;
|
||||
IDataBuffer* CreateBoneBuffer() override;
|
||||
IDataBuffer* CreateViewpointBuffer() override;
|
||||
IDataBuffer* CreateShadowmapNodesBuffer() override;
|
||||
IDataBuffer* CreateShadowmapLinesBuffer() override;
|
||||
IDataBuffer* CreateShadowmapLightsBuffer() override;
|
||||
IBuffer* CreateVertexBuffer(int numBindingPoints, int numAttributes, size_t stride, const FVertexBufferAttribute* attrs) override;
|
||||
IBuffer* CreateIndexBuffer() override;
|
||||
|
||||
IBuffer* CreateLightBuffer() override;
|
||||
IBuffer* CreateBoneBuffer() override;
|
||||
IBuffer* CreateViewpointBuffer() override;
|
||||
IBuffer* CreateShadowmapNodesBuffer() override;
|
||||
IBuffer* CreateShadowmapLinesBuffer() override;
|
||||
IBuffer* CreateShadowmapLightsBuffer() override;
|
||||
|
||||
FTexture *WipeStartScreen() override;
|
||||
FTexture *WipeEndScreen() override;
|
||||
|
|
|
@ -585,7 +585,7 @@ void VkRenderStateMolten::Draw(int dt, int index, int count, bool apply)
|
|||
{
|
||||
if (dt == DT_TriangleFan)
|
||||
{
|
||||
IIndexBuffer *oldIndexBuffer = mIndexBuffer;
|
||||
IBuffer* oldIndexBuffer = mIndexBuffer;
|
||||
mIndexBuffer = fb->GetBufferManager()->FanToTrisIndexBuffer.get();
|
||||
|
||||
if (apply || mNeedApply)
|
||||
|
|
|
@ -104,8 +104,8 @@ protected:
|
|||
VkMatrixBufferWriter mMatrixBufferWriter;
|
||||
|
||||
int mLastVertexOffsets[2] = { 0, 0 };
|
||||
IVertexBuffer *mLastVertexBuffer = nullptr;
|
||||
IIndexBuffer *mLastIndexBuffer = nullptr;
|
||||
IBuffer* mLastVertexBuffer = nullptr;
|
||||
IBuffer* mLastIndexBuffer = nullptr;
|
||||
|
||||
bool mLastModelMatrixEnabled = true;
|
||||
bool mLastTextureMatrixEnabled = true;
|
||||
|
|
Loading…
Reference in a new issue