import * as Native from './NativeTypes' import { MeshAttributes } from './Mesh' import * as Math from './Math' import { HeapBufferView } from './Heap' import { AssetType, AssetLoadResult } from './NativeEnums' export { MeshAttributes, VertexBuffer } from './Mesh' export { AssetType, AssetLoadResult } from './NativeEnums' type UserPointer = Native.UserPointer // Here the UserPointers have been replaced with references to texture objects export interface MaterialData extends Omit { textures: Array } export interface TextureData { info: Native.TextureInfo buffer: HeapBufferView } export interface MeshData { buffers: MeshAttributes material bounds: Math.BoundingBox } export type AssetData = MaterialData | TextureData | MeshData export type UserAssetData = any export interface Job { ptr: Native.Pointer assetType: AssetType } export interface Load extends Job { type: LoadType data: AssetData | UserPointer assetUserPointer: UserPointer prepare(): void finish(result: AssetLoadResult): void } export interface LoadMaterial extends Load { type: 'LoadMaterial' } export interface LoadTexture extends Load { type: 'LoadTexture' } export interface LoadMesh extends Load { type: 'LoadMesh' } export interface Unload extends Job { data: UserAssetData // An asset object passed that was passed to addAsset() readonly userPointer: UserPointer finish(): void } export type LoadType = 'LoadMaterial' | 'LoadTexture' | 'LoadMesh' export type UnloadType = 'UnloadMaterial' | 'UnloadTexture' | 'UnloadMesh'