135 lines
2.2 KiB
Swift
135 lines
2.2 KiB
Swift
import Foundation
|
|
import OpenGL.GL
|
|
|
|
|
|
public protocol Renderer
|
|
{
|
|
func create(sdlWindow: OpaquePointer) throws
|
|
func delete()
|
|
|
|
func newFrame()
|
|
func resize(width: Int32, height: Int32)
|
|
|
|
var clearColour: Colour { get set }
|
|
|
|
func setVsync(mode: VSyncMode) throws
|
|
|
|
func createMesh(mesh: Mesh) throws -> RenderMesh
|
|
func createTexture(data: UnsafeRawPointer, width: Int, height: Int) throws -> RenderTexture2D
|
|
func createTexture(data: UnsafeRawPointer, width: Int, height: Int,
|
|
filter: FilterMode, mipMode: MipMode) throws -> RenderTexture2D
|
|
|
|
func deleteMesh(_ mesh: RenderMesh)
|
|
func deleteTexture(_ texture: RenderTexture2D)
|
|
|
|
func setProjection(matrix: Mat4f)
|
|
func setView(matrix: Mat4f)
|
|
|
|
func setMaterial(_ mat: Material)
|
|
|
|
func draw(mesh: RenderMesh, model: Mat4f, environment: Environment)
|
|
func draw(mesh: RenderMesh, environment: Environment)
|
|
|
|
func drawGizmos(lines: [Line])
|
|
}
|
|
|
|
public enum RendererError: Error
|
|
{
|
|
case sdlError(message: String)
|
|
}
|
|
|
|
public enum VSyncMode
|
|
{
|
|
case off
|
|
case on
|
|
case adaptive
|
|
}
|
|
|
|
public enum FilterMode
|
|
{
|
|
case point
|
|
case linear
|
|
}
|
|
|
|
public enum MipMode
|
|
{
|
|
case off
|
|
case nearest
|
|
case linear
|
|
}
|
|
|
|
public enum WrapMode
|
|
{
|
|
case clamping
|
|
case clampBorder
|
|
case clampEdge
|
|
case mirrored
|
|
case repeating
|
|
}
|
|
|
|
public protocol RendererResource
|
|
{
|
|
associatedtype T: Resource
|
|
|
|
static var empty: Self { get }
|
|
|
|
var isValid: Bool { get }
|
|
}
|
|
|
|
public struct RenderMesh: RendererResource
|
|
{
|
|
public typealias T = Mesh
|
|
|
|
public static var empty: RenderMesh { .init() }
|
|
|
|
public var isValid: Bool { _valid }
|
|
|
|
private let _valid: Bool;
|
|
let vboHnd: Int, iboHnd: Int
|
|
let subMeshes: [Mesh.SubMesh]
|
|
|
|
private init()
|
|
{
|
|
self._valid = false
|
|
self.vboHnd = 0
|
|
self.iboHnd = 0
|
|
self.subMeshes = []
|
|
}
|
|
|
|
init(vbo: Int, ibo: Int, subMeshes: [Mesh.SubMesh])
|
|
{
|
|
self._valid = true
|
|
self.vboHnd = vbo
|
|
self.iboHnd = ibo
|
|
self.subMeshes = subMeshes
|
|
}
|
|
}
|
|
|
|
public struct RenderTexture2D: RendererResource
|
|
{
|
|
public typealias T = Texture2D
|
|
|
|
public static var empty: Self { .init(0) }
|
|
|
|
public var isValid: Bool { id != 0 }
|
|
|
|
let id: UInt32
|
|
|
|
init(_ id: UInt32)
|
|
{
|
|
self.id = id
|
|
}
|
|
}
|
|
|
|
public struct Line
|
|
{
|
|
let from: Vec3f, to: Vec3f, colour: Colour
|
|
|
|
public init(from: Vec3f, to: Vec3f, colour: Colour)
|
|
{
|
|
self.from = from
|
|
self.to = to
|
|
self.colour = colour
|
|
}
|
|
}
|