Files
CavesOfSwift/Sources/JolkEngine/Renderer/Renderer.swift

140 lines
2.6 KiB
Swift
Raw Normal View History

2024-05-05 17:01:56 +10:00
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 }
2024-05-09 20:52:01 +10:00
var wireframe: Bool { get set }
2024-05-05 17:01:56 +10:00
func setVsync(mode: VSyncMode) throws
2024-05-09 20:52:01 +10:00
func createMesh<V: Vertex>(mesh: Mesh<V>) throws -> RenderMesh<V>
2024-05-05 17:01:56 +10:00
func createTexture(data: UnsafeRawPointer, width: Int, height: Int) throws -> RenderTexture2D
func createTexture(data: UnsafeRawPointer, width: Int, height: Int,
filter: FilterMode, mipMode: MipMode) throws -> RenderTexture2D
2024-05-09 20:52:01 +10:00
func deleteMesh<V: Vertex>(_ mesh: RenderMesh<V>)
2024-05-05 17:01:56 +10:00
func deleteTexture(_ texture: RenderTexture2D)
func setProjection(matrix: Mat4f)
func setView(matrix: Mat4f)
func setMaterial(_ mat: Material)
2024-05-09 20:52:01 +10:00
func draw<V: Vertex>(mesh: RenderMesh<V>, model: Mat4f, environment: Environment)
func draw<V: Vertex>(mesh: RenderMesh<V>, environment: Environment)
func draw<V: Vertex>(mesh: RenderMesh<V>, subMesh: Mesh<V>.SubMesh, environment: Environment)
2024-05-05 17:01:56 +10:00
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 }
}
2024-05-09 20:52:01 +10:00
public struct RenderMesh<V: Vertex>: RendererResource
2024-05-05 17:01:56 +10:00
{
2024-05-09 20:52:01 +10:00
public typealias T = Mesh<V>
2024-05-05 17:01:56 +10:00
public static var empty: RenderMesh { .init() }
public var isValid: Bool { _valid }
private let _valid: Bool;
let vboHnd: Int, iboHnd: Int
2024-05-09 20:52:01 +10:00
public let subMeshes: [Mesh<V>.SubMesh]
public let materials: [Material] // HACK !!!!
2024-05-05 17:01:56 +10:00
private init()
{
self._valid = false
self.vboHnd = 0
self.iboHnd = 0
self.subMeshes = []
2024-05-09 20:52:01 +10:00
self.materials = []
2024-05-05 17:01:56 +10:00
}
2024-05-09 20:52:01 +10:00
init(vbo: Int, ibo: Int, subMeshes: [Mesh<V>.SubMesh], materials: [Material] = .init())
2024-05-05 17:01:56 +10:00
{
self._valid = true
self.vboHnd = vbo
self.iboHnd = ibo
self.subMeshes = subMeshes
2024-05-09 20:52:01 +10:00
self.materials = materials
2024-05-05 17:01:56 +10:00
}
}
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
}
}