Remove virtual inheritance

This commit is contained in:
Magnus Norddahl 2023-04-16 21:49:05 +02:00 committed by Christoph Oelckers
parent ae72639853
commit ca7e5be6b4
23 changed files with 102 additions and 141 deletions

View file

@ -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();
}
//==========================================================================

View file

@ -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);
}

View file

@ -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.
};

View file

@ -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++)
{

View file

@ -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);
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}
//===========================================================================

View file

@ -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; }
};

View file

@ -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;
}

View file

@ -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;

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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;

View file

@ -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

View file

@ -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;

View file

@ -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();

View file

@ -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);
}

View file

@ -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)

View file

@ -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();
}

View file

@ -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;

View file

@ -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)

View file

@ -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;