/* * Copyright (c) 2022, 2023 Jonathan Schleifer * * All rights reserved. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3.0 only, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * version 3.0 for more details. * * You should have received a copy of the GNU Lesser General Public License * version 3.0 along with this program. If not, see * . */ #import OF_ASSUME_NONNULL_BEGIN typedef struct OF_BOXABLE { OFVector3D position; struct { float r, g, b; } color; } O3DVertex; @protocol O3DRenderer @property (nonatomic) bool syncsToVerticalBlank; + (unsigned int)numAvailableDevices; - (instancetype)initWithResolution: (OFSize)resolution bitsPerPixel: (uint8_t)bitsPerPixel refreshRate: (float)refreshRate options: (nullable OFDictionary *)options; - (void)beginFrame; - (void)drawPolygonWithVertices: (const O3DVertex *)vertices count: (size_t)count; - (void)endFrame; @end #ifdef __cplusplus extern "C" { #endif extern OFString *const O3DRendererDeviceIndex; #ifdef __cplusplus } #endif OF_ASSUME_NONNULL_END