Files
Seele/src/Engine/Graphics/Metal/Resources.mm
T

59 lines
2.0 KiB
Plaintext
Raw Normal View History

2024-04-10 09:58:39 +02:00
#include "Resources.h"
2024-06-09 12:20:04 +02:00
#include "Enums.h"
2024-04-10 09:58:39 +02:00
#include "Graphics.h"
2024-04-13 23:51:38 +02:00
#include "Metal/MTLSampler.hpp"
2024-06-09 12:20:04 +02:00
2024-04-10 09:58:39 +02:00
using namespace Seele;
using namespace Seele::Metal;
2025-03-05 09:41:34 +01:00
DestructionManager::DestructionManager(PGraphics graphics) : graphics(graphics) {}
DestructionManager::~DestructionManager() {}
void DestructionManager::queueResourceForDestruction(OCommandBoundResource resource) {
if (resource == nullptr)
return;
if (resource->isCurrentlyBound()) {
resources.add(std::move(resource));
}
}
void DestructionManager::notifyCommandComplete() {
for (size_t i = 0; i < resources.size(); ++i) {
if (!resources[i]->isCurrentlyBound()) {
resources.removeAt(i, false);
i--;
}
}
}
2024-04-10 09:58:39 +02:00
Fence::Fence(PGraphics graphics) : handle(graphics->getDevice()->newFence()) {}
Fence::~Fence() { handle->release(); }
Event::Event(PGraphics graphics) : handle(graphics->getDevice()->newEvent()) {}
2024-04-13 23:51:38 +02:00
Event::~Event() { handle->release(); }
2024-08-28 17:54:14 +02:00
Sampler::Sampler(PGraphics graphics, const SamplerCreateInfo& createInfo) {
MTL::SamplerDescriptor* desc = MTL::SamplerDescriptor::alloc()->init();
desc->setBorderColor(cast(createInfo.borderColor));
desc->setCompareFunction(cast(createInfo.compareOp));
desc->setLodAverage(createInfo.mipLodBias);
desc->setLodMaxClamp(createInfo.maxLod);
desc->setLodMinClamp(createInfo.minLod);
desc->setMinFilter(cast(createInfo.minFilter));
desc->setMagFilter(cast(createInfo.magFilter));
desc->setMipFilter(cast(createInfo.mipmapMode));
desc->setMaxAnisotropy(createInfo.maxAnisotropy);
desc->setNormalizedCoordinates(!createInfo.unnormalizedCoordinates);
desc->setRAddressMode(cast(createInfo.addressModeU));
desc->setSAddressMode(cast(createInfo.addressModeV));
desc->setTAddressMode(cast(createInfo.addressModeW));
desc->setSupportArgumentBuffers(true);
sampler = graphics->getDevice()->newSamplerState(desc);
desc->release();
2024-04-13 23:51:38 +02:00
}
2025-03-05 09:41:34 +01:00
Sampler::~Sampler() { sampler->release(); }