fix: lighting

This commit is contained in:
Samuliak 2024-07-23 13:16:33 +02:00
parent 804a0b083f
commit 8a1d9d5a22
5 changed files with 88 additions and 25 deletions

View file

@ -36,10 +36,10 @@ public:
additionalAllocations.clear();
}
BufferHandle get(const std::span<const PICA::Vertex>& vertices) {
BufferHandle get(const void* data, size_t size) {
// If the vertex buffer is too large, just create a new one
if (ptr + vertices.size_bytes() > CACHE_BUFFER_SIZE) {
MTL::Buffer* newBuffer = device->newBuffer(vertices.data(), vertices.size_bytes(), MTL::ResourceStorageModeShared);
if (ptr + size > CACHE_BUFFER_SIZE) {
MTL::Buffer* newBuffer = device->newBuffer(data, size, MTL::ResourceStorageModeShared);
newBuffer->setLabel(toNSString("Additional vertex buffer"));
additionalAllocations.push_back(newBuffer);
Helpers::warn("Vertex buffer doesn't have enough space, creating a new buffer");
@ -48,10 +48,10 @@ public:
}
// Copy the data into the buffer
memcpy((char*)buffer->contents() + ptr, vertices.data(), vertices.size_bytes());
memcpy((char*)buffer->contents() + ptr, data, size);
size_t oldPtr = ptr;
ptr += vertices.size_bytes();
ptr += size;
return BufferHandle{buffer, oldPtr};
}

View file

@ -184,5 +184,6 @@ class RendererMTL final : public Renderer {
void setupTextureEnvState(MTL::RenderCommandEncoder* encoder);
void bindTexturesToSlots(MTL::RenderCommandEncoder* encoder);
void updateLightingLUT(MTL::RenderCommandEncoder* encoder);
void updateFogLUT(MTL::RenderCommandEncoder* encoder);
void textureCopyImpl(Metal::ColorRenderTarget& srcFramebuffer, Metal::ColorRenderTarget& destFramebuffer, const Math::Rect<u32>& srcRect, const Math::Rect<u32>& destRect);
};