get all the commands to work

This commit is contained in:
Greg Wells
2025-06-29 14:40:09 -04:00
parent 67e5e6e36a
commit 8211876837
37 changed files with 295 additions and 154 deletions

View File

@@ -1,7 +1,15 @@
#pragma once
#import <Metal/Metal.h>
#include "buffers/gryphn_buffer.h"
#include "output_device/gryphn_output_device.h"
#include "devices/metal_output_devices.h"
struct gnPlatformBuffer_t {
id<MTLBuffer> buffer, stagingBuffer;
bool useStagingBuffer;
};
gnReturnCode createMetalBuffer(gnBufferHandle buffer, gnDevice device, gnBufferInfo info);
void metalBufferData(gnBufferHandle buffer, size_t dataSize, void* data);
void* mapMetalBuffer(gnBufferHandle buffer);
void destroyMetalBuffer(gnBufferHandle buffer);

View File

@@ -1,9 +1,6 @@
#include "metal_buffer.h"
#include "buffers/gryphn_buffer.h"
#include "output_device/gryphn_output_device.h"
#include "devices/metal_output_devices.h"
gnReturnCode gnCreateBufferFn(gnBufferHandle buffer, gnOutputDeviceHandle device, gnBufferInfo info) {
gnReturnCode createMetalBuffer(gnBufferHandle buffer, gnDevice device, gnBufferInfo info) {
buffer->buffer = malloc(sizeof(struct gnPlatformBuffer_t));
MTLResourceOptions option;
buffer->buffer->useStagingBuffer = (info.usage == GN_DYNAMIC_DRAW) ? NO : YES;
@@ -16,7 +13,7 @@ gnReturnCode gnCreateBufferFn(gnBufferHandle buffer, gnOutputDeviceHandle device
buffer->buffer->buffer = [device->outputDevice->device newBufferWithLength:info.size options:option];
return GN_SUCCESS;
}
void gnBufferDataFn(gnBufferHandle buffer, size_t dataSize, void* data) {
void metalBufferData(gnBufferHandle buffer, size_t dataSize, void* data) {
void* bufferData;
if (buffer->buffer->useStagingBuffer) {
memcpy(buffer->buffer->stagingBuffer.contents, data, dataSize);
@@ -29,10 +26,10 @@ void gnBufferDataFn(gnBufferHandle buffer, size_t dataSize, void* data) {
} else
memcpy(buffer->buffer->buffer.contents, data, dataSize);
}
void* gnMapBufferFn(gnBufferHandle buffer) {
void* mapMetalBuffer(gnBufferHandle buffer) {
return buffer->buffer->buffer.contents;
}
void gnDestroyBufferFn(gnBufferHandle buffer) {
void destroyMetalBuffer(gnBufferHandle buffer) {
if (buffer->buffer->useStagingBuffer)
[buffer->buffer->stagingBuffer release];
[buffer->buffer->buffer release];