ris-framework 0.1.0-dev.9 → 0.2.0-dev.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/CHANGELOG.md +49 -1
  2. package/README.md +15 -4
  3. package/dist/Framework.d.ts +9 -3
  4. package/dist/Framework.d.ts.map +1 -1
  5. package/dist/api/IFramework.d.ts +7 -6
  6. package/dist/api/IFramework.d.ts.map +1 -1
  7. package/dist/api/_export.d.ts +2 -0
  8. package/dist/api/_export.d.ts.map +1 -1
  9. package/dist/api/camera/CameraFactory.d.ts +3 -2
  10. package/dist/api/camera/CameraFactory.d.ts.map +1 -1
  11. package/dist/api/camera/ICamera.d.ts +5 -0
  12. package/dist/api/camera/ICamera.d.ts.map +1 -1
  13. package/dist/api/camera/ICameraFactory.d.ts +5 -6
  14. package/dist/api/camera/ICameraFactory.d.ts.map +1 -1
  15. package/dist/api/camera/OrthographicCamera.d.ts +7 -0
  16. package/dist/api/camera/OrthographicCamera.d.ts.map +1 -1
  17. package/dist/api/camera/PerspectiveCamera.d.ts +30 -6
  18. package/dist/api/camera/PerspectiveCamera.d.ts.map +1 -1
  19. package/dist/api/content/ContentManager.d.ts +67 -2
  20. package/dist/api/content/ContentManager.d.ts.map +1 -1
  21. package/dist/api/content/IContentManager.d.ts +32 -1
  22. package/dist/api/content/IContentManager.d.ts.map +1 -1
  23. package/dist/api/content/ShaderModuleContent.d.ts.map +1 -1
  24. package/dist/api/data/Color.d.ts +5 -0
  25. package/dist/api/data/Color.d.ts.map +1 -1
  26. package/dist/api/geometry/BaseGeometry.d.ts +9 -0
  27. package/dist/api/geometry/BaseGeometry.d.ts.map +1 -1
  28. package/dist/api/geometry/GeometryBuilder.d.ts +3 -1
  29. package/dist/api/geometry/GeometryBuilder.d.ts.map +1 -1
  30. package/dist/api/geometry/IGeometryBuilder.d.ts +24 -0
  31. package/dist/api/geometry/IGeometryBuilder.d.ts.map +1 -1
  32. package/dist/api/geometry/_export-geometry.d.ts +1 -0
  33. package/dist/api/geometry/_export-geometry.d.ts.map +1 -1
  34. package/dist/api/input/InputManager.d.ts +4 -0
  35. package/dist/api/input/InputManager.d.ts.map +1 -1
  36. package/dist/api/lights/AmbientLight.d.ts +35 -0
  37. package/dist/api/lights/AmbientLight.d.ts.map +1 -0
  38. package/dist/api/lights/DirectionalLight.d.ts +40 -0
  39. package/dist/api/lights/DirectionalLight.d.ts.map +1 -0
  40. package/dist/api/lights/LightFactory.d.ts +18 -0
  41. package/dist/api/lights/LightFactory.d.ts.map +1 -0
  42. package/dist/api/lights/LightId.d.ts +6 -0
  43. package/dist/api/lights/LightId.d.ts.map +1 -0
  44. package/dist/api/lights/LightsBuffer.d.ts +70 -0
  45. package/dist/api/lights/LightsBuffer.d.ts.map +1 -0
  46. package/dist/api/lights/PointLight.d.ts +59 -0
  47. package/dist/api/lights/PointLight.d.ts.map +1 -0
  48. package/dist/api/lights/_export.d.ts +6 -0
  49. package/dist/api/lights/_export.d.ts.map +1 -0
  50. package/dist/api/loaders/ObjGeometryMapper.d.ts +19 -0
  51. package/dist/api/loaders/ObjGeometryMapper.d.ts.map +1 -0
  52. package/dist/api/loaders/_export.d.ts +1 -0
  53. package/dist/api/loaders/_export.d.ts.map +1 -1
  54. package/dist/api/loaders/obj/ObjLoader.d.ts +29 -0
  55. package/dist/api/loaders/obj/ObjLoader.d.ts.map +1 -0
  56. package/dist/api/loaders/obj/ObjTypes.d.ts +103 -0
  57. package/dist/api/loaders/obj/ObjTypes.d.ts.map +1 -0
  58. package/dist/api/loaders/obj/index.d.ts +3 -0
  59. package/dist/api/loaders/obj/index.d.ts.map +1 -0
  60. package/dist/api/material/ForwardBlinnPhongMaterial.d.ts +127 -0
  61. package/dist/api/material/ForwardBlinnPhongMaterial.d.ts.map +1 -0
  62. package/dist/api/material/IMaterial.d.ts +15 -6
  63. package/dist/api/material/IMaterial.d.ts.map +1 -1
  64. package/dist/api/material/IMaterialFactory.d.ts +17 -2
  65. package/dist/api/material/IMaterialFactory.d.ts.map +1 -1
  66. package/dist/api/material/InspectTextureMipsMaterial.d.ts +16 -7
  67. package/dist/api/material/InspectTextureMipsMaterial.d.ts.map +1 -1
  68. package/dist/api/material/MaterialFactory.d.ts +6 -0
  69. package/dist/api/material/MaterialFactory.d.ts.map +1 -1
  70. package/dist/api/material/SpriteMaterial.d.ts +51 -0
  71. package/dist/api/material/SpriteMaterial.d.ts.map +1 -0
  72. package/dist/api/material/UnlitMaterial.d.ts +28 -10
  73. package/dist/api/material/UnlitMaterial.d.ts.map +1 -1
  74. package/dist/api/material/_export.d.ts +2 -0
  75. package/dist/api/material/_export.d.ts.map +1 -1
  76. package/dist/api/meshes/IMesh.d.ts +35 -5
  77. package/dist/api/meshes/IMesh.d.ts.map +1 -1
  78. package/dist/api/meshes/IMeshFactory.d.ts +25 -4
  79. package/dist/api/meshes/IMeshFactory.d.ts.map +1 -1
  80. package/dist/api/meshes/Mesh.d.ts +58 -6
  81. package/dist/api/meshes/Mesh.d.ts.map +1 -1
  82. package/dist/api/meshes/MeshFactory.d.ts +7 -3
  83. package/dist/api/meshes/MeshFactory.d.ts.map +1 -1
  84. package/dist/api/meshes/QuadMesh.d.ts +5 -1
  85. package/dist/api/meshes/QuadMesh.d.ts.map +1 -1
  86. package/dist/api/meshes/SubMesh.d.ts +47 -0
  87. package/dist/api/meshes/SubMesh.d.ts.map +1 -0
  88. package/dist/api/meshes/_export.d.ts +1 -0
  89. package/dist/api/meshes/_export.d.ts.map +1 -1
  90. package/dist/api/rendering/render-pipelines/IForwardBlinnPhongRenderPipeline.d.ts +56 -0
  91. package/dist/api/rendering/render-pipelines/IForwardBlinnPhongRenderPipeline.d.ts.map +1 -0
  92. package/dist/api/rendering/render-pipelines/IRenderPipeline.d.ts +3 -0
  93. package/dist/api/rendering/render-pipelines/IRenderPipeline.d.ts.map +1 -1
  94. package/dist/api/rendering/render-pipelines/IRenderPipelineFactory.d.ts +29 -0
  95. package/dist/api/rendering/render-pipelines/IRenderPipelineFactory.d.ts.map +1 -1
  96. package/dist/api/rendering/render-pipelines/_export-render-pipelines.d.ts +1 -0
  97. package/dist/api/rendering/render-pipelines/_export-render-pipelines.d.ts.map +1 -1
  98. package/dist/api/scene/Scene.d.ts +104 -0
  99. package/dist/api/scene/Scene.d.ts.map +1 -0
  100. package/dist/api/shader/IShaderModuleLoader.d.ts +4 -1
  101. package/dist/api/shader/IShaderModuleLoader.d.ts.map +1 -1
  102. package/dist/api/shader/{shader-loader.d.ts → ShaderLoader.d.ts} +1 -1
  103. package/dist/api/shader/ShaderLoader.d.ts.map +1 -0
  104. package/dist/api/sprites/SpriteBatchDrawable.d.ts +1 -1
  105. package/dist/api/sprites/SpriteBatchDrawable.d.ts.map +1 -1
  106. package/dist/api/sprites/SpriteBatchMesh.d.ts +14 -1
  107. package/dist/api/sprites/SpriteBatchMesh.d.ts.map +1 -1
  108. package/dist/api/utilities/GeometryUtilities.d.ts.map +1 -1
  109. package/dist/api/window/WindowManager.d.ts +4 -0
  110. package/dist/api/window/WindowManager.d.ts.map +1 -1
  111. package/dist/core/rendering/vertex-buffer-layout.d.ts +1 -0
  112. package/dist/core/rendering/vertex-buffer-layout.d.ts.map +1 -1
  113. package/dist/index.js +2252 -260
  114. package/dist/webgl/WebGlGraphicsDevice.d.ts.map +1 -1
  115. package/dist/webgl/lights/WebGlAmbientLightFactory.d.ts +17 -0
  116. package/dist/webgl/lights/WebGlAmbientLightFactory.d.ts.map +1 -0
  117. package/dist/webgl/lights/WebGlLightsBuffer.d.ts +55 -0
  118. package/dist/webgl/lights/WebGlLightsBuffer.d.ts.map +1 -0
  119. package/dist/webgl/render-pipelines/AWebGlRenderPipeline.d.ts +3 -1
  120. package/dist/webgl/render-pipelines/AWebGlRenderPipeline.d.ts.map +1 -1
  121. package/dist/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.d.ts +3 -0
  122. package/dist/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.d.ts.map +1 -1
  123. package/dist/webgl/render-pipelines/WebGlRenderPipelineFactory.d.ts +3 -1
  124. package/dist/webgl/render-pipelines/WebGlRenderPipelineFactory.d.ts.map +1 -1
  125. package/dist/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.d.ts +3 -1
  126. package/dist/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.d.ts.map +1 -1
  127. package/dist/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.d.ts +88 -0
  128. package/dist/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.d.ts.map +1 -0
  129. package/dist/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.d.ts +3 -1
  130. package/dist/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.d.ts.map +1 -1
  131. package/dist/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.d.ts +3 -1
  132. package/dist/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.d.ts.map +1 -1
  133. package/dist/webgl/shader/WebGlShaderModule.d.ts +4 -1
  134. package/dist/webgl/shader/WebGlShaderModule.d.ts.map +1 -1
  135. package/dist/webgl/shader/WebGlShaderModuleLoader.d.ts +16 -5
  136. package/dist/webgl/shader/WebGlShaderModuleLoader.d.ts.map +1 -1
  137. package/dist/webgl/texture/WebGlTexture2D.d.ts +8 -1
  138. package/dist/webgl/texture/WebGlTexture2D.d.ts.map +1 -1
  139. package/dist/webgl/utilities/webgl-filter-anisotropic-utilities.d.ts +0 -1
  140. package/dist/webgl/utilities/webgl-filter-anisotropic-utilities.d.ts.map +1 -1
  141. package/package.json +4 -4
  142. package/shaders/glsl/forward_blinn_phong_material_fs.glsl +110 -0
  143. package/shaders/glsl/forward_blinn_phong_material_vs.glsl +32 -0
  144. package/shaders/glsl/sprite_fs.glsl +1 -1
  145. package/shaders/glsl/unlit_material_fs.glsl +1 -1
  146. package/src/Framework.ts +37 -13
  147. package/src/api/IFramework.ts +8 -6
  148. package/src/api/_export.ts +2 -0
  149. package/src/api/camera/CameraFactory.ts +6 -6
  150. package/src/api/camera/ICamera.ts +6 -0
  151. package/src/api/camera/ICameraFactory.ts +5 -10
  152. package/src/api/camera/OrthographicCamera.ts +23 -1
  153. package/src/api/camera/PerspectiveCamera.ts +60 -15
  154. package/src/api/content/ContentManager.ts +201 -5
  155. package/src/api/content/IContentManager.ts +33 -1
  156. package/src/api/content/ShaderModuleContent.ts +9 -0
  157. package/src/api/data/Color.ts +7 -1
  158. package/src/api/geometry/BaseGeometry.ts +23 -0
  159. package/src/api/geometry/GeometryBuilder.ts +14 -2
  160. package/src/api/geometry/IGeometryBuilder.ts +31 -1
  161. package/src/api/geometry/_export-geometry.ts +2 -1
  162. package/src/api/input/InputManager.ts +14 -5
  163. package/src/api/lights/AmbientLight.ts +53 -0
  164. package/src/api/lights/DirectionalLight.ts +60 -0
  165. package/src/api/lights/LightFactory.ts +21 -0
  166. package/src/api/lights/LightId.ts +9 -0
  167. package/src/api/lights/LightsBuffer.ts +87 -0
  168. package/src/api/lights/PointLight.ts +91 -0
  169. package/src/api/lights/_export.ts +5 -0
  170. package/src/api/loaders/ObjGeometryMapper.ts +28 -0
  171. package/src/api/loaders/_export.ts +2 -1
  172. package/src/api/loaders/obj/ObjLoader.ts +270 -0
  173. package/src/api/loaders/obj/ObjTypes.ts +124 -0
  174. package/src/api/loaders/obj/index.ts +5 -0
  175. package/src/api/material/ForwardBlinnPhongMaterial.ts +302 -0
  176. package/src/api/material/IMaterial.ts +16 -6
  177. package/src/api/material/IMaterialFactory.ts +19 -2
  178. package/src/api/material/InspectTextureMipsMaterial.ts +63 -24
  179. package/src/api/material/MaterialFactory.ts +12 -0
  180. package/src/api/material/SpriteMaterial.ts +83 -0
  181. package/src/api/material/UnlitMaterial.ts +101 -29
  182. package/src/api/material/_export.ts +3 -1
  183. package/src/api/meshes/IMesh.ts +45 -6
  184. package/src/api/meshes/IMeshFactory.ts +27 -4
  185. package/src/api/meshes/Mesh.ts +163 -41
  186. package/src/api/meshes/MeshFactory.ts +30 -6
  187. package/src/api/meshes/QuadMesh.ts +6 -2
  188. package/src/api/meshes/SubMesh.ts +71 -0
  189. package/src/api/meshes/_export.ts +1 -0
  190. package/src/api/rendering/render-pipelines/IForwardBlinnPhongRenderPipeline.ts +66 -0
  191. package/src/api/rendering/render-pipelines/IRenderPipeline.ts +4 -0
  192. package/src/api/rendering/render-pipelines/IRenderPipelineFactory.ts +39 -0
  193. package/src/api/rendering/render-pipelines/_export-render-pipelines.ts +2 -1
  194. package/src/api/scene/Scene.ts +264 -0
  195. package/src/api/shader/IShaderModuleLoader.ts +2 -1
  196. package/src/api/sprites/SpriteBatchDrawable.ts +12 -16
  197. package/src/api/sprites/SpriteBatchMesh.ts +23 -4
  198. package/src/api/utilities/GeometryUtilities.ts +2 -0
  199. package/src/api/window/WindowManager.ts +22 -2
  200. package/src/core/rendering/vertex-buffer-layout.ts +32 -1
  201. package/src/main.ts +0 -1
  202. package/src/webgl/WebGlGraphicsDevice.ts +0 -1
  203. package/src/webgl/lights/WebGlAmbientLightFactory.ts +35 -0
  204. package/src/webgl/lights/WebGlLightsBuffer.ts +215 -0
  205. package/src/webgl/render-pipelines/AWebGlRenderPipeline.ts +7 -1
  206. package/src/webgl/render-pipelines/WebGlMainRenderTargetRenderPipeline.ts +3 -0
  207. package/src/webgl/render-pipelines/WebGlRenderPipelineFactory.ts +24 -2
  208. package/src/webgl/render-pipelines/inspect/WebGlInspectTextureMipsRenderPipeline.ts +16 -6
  209. package/src/webgl/render-pipelines/material/WebGlBlinnPhongRenderPipeline.ts +300 -0
  210. package/src/webgl/render-pipelines/material/WebGlUnlitRenderPipeline.ts +16 -6
  211. package/src/webgl/render-pipelines/sprite/WebGlSpriteRenderPipeline.ts +11 -7
  212. package/src/webgl/shader/WebGlShaderModule.ts +11 -4
  213. package/src/webgl/shader/WebGlShaderModuleLoader.ts +29 -10
  214. package/src/webgl/texture/WebGlTexture2D.ts +19 -5
  215. package/src/webgl/utilities/webgl-filter-anisotropic-utilities.ts +9 -6
  216. package/dist/api/shader/shader-loader.d.ts.map +0 -1
  217. /package/src/api/shader/{shader-loader.ts → ShaderLoader.ts} +0 -0
@@ -0,0 +1,127 @@
1
+ import type { IMesh } from "../meshes/IMesh.js";
2
+ import type { ITexture2D } from "../rendering/texture/ITexture2D.js";
3
+ import type { ISampler } from "../rendering/sampler/ISampler.js";
4
+ import { GeometryFormat } from "../geometry/GeometryFormat.js";
5
+ import type { IUniformBuffer } from "../rendering/buffers/IUniformBuffer.js";
6
+ import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.js";
7
+ import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.js";
8
+ import type { IFramework } from "../IFramework.js";
9
+ import { Color } from "../data/Color.js";
10
+ import type { IPrimitiveState } from "../rendering/primitive/IPrimitiveState.js";
11
+ import type { ICamera } from "../camera/ICamera.js";
12
+ import type { LightsBuffer } from "../lights/LightsBuffer.js";
13
+ /**
14
+ * The additional material config options.
15
+ * @public
16
+ **/
17
+ export declare class ForwardBlinnPhongMaterialDescriptor {
18
+ /** The primitive state. */
19
+ primitiveState?: IPrimitiveState;
20
+ /** The projection view buffer. */
21
+ projectionViewBuffer: IUniformBuffer;
22
+ /** The camera position buffer. */
23
+ cameraPositionBuffer: IUniformBuffer;
24
+ /** The lights buffer. The shader is compiled for its light counts. Can also be set later through `material.lightsBuffer`. */
25
+ lightsBuffer?: LightsBuffer;
26
+ }
27
+ /**
28
+ * The Blinn-Phong material with forward calculated lighting.
29
+ * @public
30
+ */
31
+ export declare class ForwardBlinnPhongMaterial {
32
+ private readonly _framework;
33
+ private _lightsBuffer?;
34
+ private _diffuseColorCache;
35
+ private _ambientColorCache;
36
+ private _specularColorCache;
37
+ private _shininessCache;
38
+ private _materialData;
39
+ /** Created when the model buffer is assigned (the pipeline requires one). */
40
+ private _pipeline?;
41
+ private readonly _primitiveState?;
42
+ /** Texture and sampler set before the pipeline exists; applied when it is created. */
43
+ private _pendingTexture?;
44
+ private _pendingSampler?;
45
+ private _samplerSet;
46
+ private _projectionViewBuffer;
47
+ private _camera?;
48
+ private _cameraPositionBuffer;
49
+ private _materialBuffer;
50
+ private _modelBuffer?;
51
+ /**
52
+ * The constructor.
53
+ * @param framework The framework.
54
+ * @param descriptor The material descriptor. Its projection view and camera position buffers are shared and are not disposed by this material.
55
+ * @throws Error when `descriptor`, `descriptor.projectionViewBuffer` or `descriptor.cameraPositionBuffer` is missing.
56
+ */
57
+ constructor(framework: IFramework, descriptor: ForwardBlinnPhongMaterialDescriptor);
58
+ /** Creates the pipeline with the current bindings. */
59
+ private _createPipeline;
60
+ /**
61
+ * The ambient color of this material.
62
+ * Alpha is ignored. By default, it is (0.1,0.1,0.1).
63
+ */
64
+ ambientColor: Color;
65
+ /**
66
+ * The diffuse color of this material.
67
+ * Alpha is ignored. By default, it is (0.8,0.8,0.8).
68
+ */
69
+ diffuseColor: Color;
70
+ /**
71
+ * The specular color of this material (MTL `Ks`).
72
+ * Alpha is ignored. By default, it is (0.5,0.5,0.5).
73
+ */
74
+ specularColor: Color;
75
+ /**
76
+ * The specular exponent (MTL `Ns`). Higher values give smaller, sharper highlights. By default, it is 32.
77
+ */
78
+ shininess: number;
79
+ /**
80
+ * The camera. Setting it binds the camera's projection view and position buffers to the pipeline
81
+ * (used by the scene when its camera changes). Setting undefined keeps the last bound buffers.
82
+ * Undefined until set: the constructor only takes the buffers.
83
+ */
84
+ get camera(): ICamera | undefined;
85
+ /** @inheritDoc */
86
+ set camera(camera: ICamera | undefined);
87
+ /** The lights buffer with the scene's lights. Shared, not disposed by this material. */
88
+ get lightsBuffer(): LightsBuffer | undefined;
89
+ /** The lights buffer with the scene's lights. Shared, not disposed by this material. */
90
+ set lightsBuffer(lightsBuffer: LightsBuffer | undefined);
91
+ /**
92
+ * The texture to inspect.
93
+ */
94
+ get diffuseTexture(): ITexture2D;
95
+ /**
96
+ * The texture to inspect.
97
+ */
98
+ set diffuseTexture(value: ITexture2D);
99
+ /**
100
+ * The texture sampler.
101
+ */
102
+ get diffuseTextureSampler(): ISampler | undefined;
103
+ /**
104
+ * The texture sampler.
105
+ */
106
+ set diffuseTextureSampler(value: ISampler | undefined);
107
+ /**
108
+ * The model buffer (std140 `mat4`). Owned by the mesh, which assigns it before drawing; never disposed by this material.
109
+ * Undefined until assigned: rendering without one throws.
110
+ */
111
+ get modelBuffer(): IUniformBuffer | undefined;
112
+ /** Binds the model buffer to the pipeline. */
113
+ set modelBuffer(value: IUniformBuffer | undefined);
114
+ /**
115
+ * The geometry format.
116
+ */
117
+ readonly geometryFormat = GeometryFormat.POS3_COLOR4_TEXTURECOORDS2_NORMAL3;
118
+ /** @inheritDoc */
119
+ beforeRender(): void;
120
+ /** @inheritDoc */
121
+ renderMesh(mesh: IMesh): void;
122
+ /** @inheritDoc */
123
+ render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer, indicesCount?: number, indicesOffset?: number): void;
124
+ /** @inheritDoc */
125
+ dispose(): void;
126
+ }
127
+ //# sourceMappingURL=ForwardBlinnPhongMaterial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForwardBlinnPhongMaterial.d.ts","sourceRoot":"","sources":["../../../src/api/material/ForwardBlinnPhongMaterial.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,34 @@
1
- import { mat4 } from "gl-matrix";
2
1
  import type { IDisposable } from "../core/IDisposable.js";
3
2
  import { GeometryFormat } from "../geometry/GeometryFormat.js";
4
3
  import type { IMesh } from "../meshes/IMesh.js";
5
4
  import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.js";
6
5
  import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.js";
6
+ import type { ICamera } from "../camera/ICamera.js";
7
+ import type { IUniformBuffer } from "../rendering/buffers/IUniformBuffer.js";
7
8
  /**
8
9
  * The material interface.
10
+ * @public
9
11
  */
10
12
  export interface IMaterial extends IDisposable {
11
13
  /**
12
- * The model matrix.
14
+ * The camera this material renders with, for materials that use one (unlit, Blinn-Phong).
15
+ * A `Scene` assigns its camera to the materials of its meshes in `scene.update()`.
13
16
  */
14
- modelMatrix: mat4;
17
+ camera?: ICamera;
15
18
  /**
16
- * The geometry format required by the material.
19
+ * The model buffer (std140 `mat4`) for materials that use one (unlit, Blinn-Phong, inspect mips).
20
+ * A mesh owns it and assigns it before drawing, like the scene assigns its camera; materials never dispose it.
21
+ * Materials without the property (e.g. the sprite material) are left alone.
17
22
  */
23
+ modelBuffer?: IUniformBuffer;
24
+ /** The geometry format required by the material.*/
18
25
  readonly geometryFormat: GeometryFormat;
19
26
  /**
20
27
  * Called before rendering.
21
28
  */
22
29
  beforeRender(): void;
23
30
  /**
24
- * Renders the material.
31
+ * Renders the mesh with this material, honouring the mesh's index range.
25
32
  * @param mesh - The mesh.
26
33
  */
27
34
  renderMesh(mesh: IMesh): void;
@@ -29,7 +36,9 @@ export interface IMaterial extends IDisposable {
29
36
  * Renders the material.
30
37
  * @param vertexBuffer - The vertex buffer.
31
38
  * @param indexBuffer - The index buffer.
39
+ * @param indicesCount - The number of indices to draw. -1 or undefined draws all.
40
+ * @param indicesOffset - The first index to draw. Defaults to 0.
32
41
  */
33
- render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer): void;
42
+ render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer, indicesCount?: number, indicesOffset?: number): void;
34
43
  }
35
44
  //# sourceMappingURL=IMaterial.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IMaterial.d.ts","sourceRoot":"","sources":["../../../src/api/material/IMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,WAAW;IAE1C;;OAEG;IACH,WAAW,EAAE,IAAI,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAExC;;OAEG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IAE9B;;;;OAIG;IACH,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;CAExE"}
1
+ {"version":3,"file":"IMaterial.d.ts","sourceRoot":"","sources":["../../../src/api/material/IMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE7E;;;GAGG;AACH,MAAM,WAAW,SAAU,SAAQ,WAAW;IAE1C;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC;IAE7B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAExC;;OAEG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IAE9B;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAEvH"}
@@ -1,5 +1,7 @@
1
1
  import { InspectTextureMipsMaterial } from "./InspectTextureMipsMaterial.js";
2
+ import type { SpriteMaterial, SpriteMaterialDescriptor } from "./SpriteMaterial.js";
2
3
  import { UnlitMaterial, UnlitMaterialDescriptor } from "./UnlitMaterial.js";
4
+ import type { ForwardBlinnPhongMaterial, ForwardBlinnPhongMaterialDescriptor } from "./ForwardBlinnPhongMaterial.js";
3
5
  /**
4
6
  * The material factory.
5
7
  */
@@ -11,9 +13,22 @@ export interface IMaterialFactory {
11
13
  createInspectTextureMipsMaterial(): InspectTextureMipsMaterial;
12
14
  /**
13
15
  * Creates an unlit material.
14
- * @param config The optional additional configuration options for material, such as rendering options.
16
+ * @param descriptor The optional additional configuration options for material, such as rendering options.
15
17
  * @returns The Unlit Material.
16
18
  */
17
- createUnlitMaterial(config?: UnlitMaterialDescriptor): UnlitMaterial;
19
+ createUnlitMaterial(descriptor?: UnlitMaterialDescriptor): UnlitMaterial;
20
+ /**
21
+ * Creates a sprite material.
22
+ * @param descriptor The sprite material descriptor with projection view buffer, texture and sampler.
23
+ * @returns The Sprite Material.
24
+ */
25
+ createSpriteMaterial(descriptor: SpriteMaterialDescriptor): SpriteMaterial;
26
+ /**
27
+ * Creates a Blinn-Phong material with forward calculated lighting.
28
+ * @param descriptor The configuration: the required projection view and camera position buffers, plus optional lights buffer and primitive state.
29
+ * @throws Error when a required buffer is missing.
30
+ * @returns The Forward Blinn-Phong Material.
31
+ */
32
+ createForwardBlinnPhongMaterial(descriptor: ForwardBlinnPhongMaterialDescriptor): ForwardBlinnPhongMaterial;
18
33
  }
19
34
  //# sourceMappingURL=IMaterialFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IMaterialFactory.d.ts","sourceRoot":"","sources":["../../../src/api/material/IMaterialFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAC,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAC,aAAa,EAAE,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAE7B;;;OAGG;IACH,gCAAgC,IAAI,0BAA0B,CAAC;IAE/D;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,aAAa,CAAC;CACxE"}
1
+ {"version":3,"file":"IMaterialFactory.d.ts","sourceRoot":"","sources":["../../../src/api/material/IMaterialFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAC,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAC,cAAc,EAAE,wBAAwB,EAAC,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAC,aAAa,EAAE,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAC,yBAAyB,EAAE,mCAAmC,EAAC,MAAM,gCAAgC,CAAC;AAEnH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAE7B;;;OAGG;IACH,gCAAgC,IAAI,0BAA0B,CAAC;IAE/D;;;;OAIG;IACH,mBAAmB,CAAC,UAAU,CAAC,EAAE,uBAAuB,GAAG,aAAa,CAAC;IAEzE;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAAE,wBAAwB,GAAG,cAAc,CAAC;IAE3E;;;;;OAKG;IACH,+BAA+B,CAAC,UAAU,EAAE,mCAAmC,GAAG,yBAAyB,CAAC;CAC/G"}
@@ -1,8 +1,8 @@
1
1
  import type { IMesh } from "../meshes/IMesh.js";
2
2
  import type { ITexture2D } from "../rendering/texture/ITexture2D.js";
3
3
  import type { ISampler } from "../rendering/sampler/ISampler.js";
4
- import { mat4 } from "gl-matrix";
5
4
  import { GeometryFormat } from "../geometry/GeometryFormat.js";
5
+ import type { IUniformBuffer } from "../rendering/buffers/IUniformBuffer.js";
6
6
  import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.js";
7
7
  import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.js";
8
8
  import type { IFramework } from "../IFramework.js";
@@ -12,12 +12,18 @@ import type { IFramework } from "../IFramework.js";
12
12
  export declare class InspectTextureMipsMaterial {
13
13
  private readonly _framework;
14
14
  private _mipLevel;
15
- private _pipeline;
15
+ /** Created when the model buffer is assigned (the pipeline requires one). */
16
+ private _pipeline?;
17
+ /** Texture and sampler set before the pipeline exists; applied when it is created. */
18
+ private _pendingTexture?;
19
+ private _pendingSampler?;
20
+ private _samplerSet;
16
21
  private _projectionViewBuffer;
17
22
  private _fragmentDataBuffer;
18
- private _modelBuffer;
19
- private _previousModelMatrix;
23
+ private _modelBuffer?;
20
24
  constructor(framework: IFramework);
25
+ /** Creates the pipeline with the current bindings. */
26
+ private _createPipeline;
21
27
  /**
22
28
  * The mip level to inspect.
23
29
  */
@@ -39,9 +45,12 @@ export declare class InspectTextureMipsMaterial {
39
45
  */
40
46
  set textureSampler(value: ISampler | undefined);
41
47
  /**
42
- * The model matrix.
48
+ * The model buffer (std140 `mat4`). Owned by the mesh, which assigns it before drawing; never disposed by this material.
49
+ * Undefined until assigned: rendering without one throws.
43
50
  */
44
- modelMatrix: mat4;
51
+ get modelBuffer(): IUniformBuffer | undefined;
52
+ /** Binds the model buffer to the pipeline. */
53
+ set modelBuffer(value: IUniformBuffer | undefined);
45
54
  /**
46
55
  * The geometry format.
47
56
  */
@@ -51,7 +60,7 @@ export declare class InspectTextureMipsMaterial {
51
60
  /** @inheritDoc */
52
61
  renderMesh(mesh: IMesh): void;
53
62
  /** @inheritDoc */
54
- render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer): void;
63
+ render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer, indicesCount?: number, indicesOffset?: number): void;
55
64
  /** @inheritDoc */
56
65
  dispose(): void;
57
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InspectTextureMipsMaterial.d.ts","sourceRoot":"","sources":["../../../src/api/material/InspectTextureMipsMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;GAEG;AACH,qBAAa,0BAA0B;IAEnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,qBAAqB,CAAiB;IAC9C,OAAO,CAAC,mBAAmB,CAAiB;IAC5C,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,oBAAoB,CAAiB;gBAE1B,SAAS,EAAE,UAAU;IAcxC;;OAEG;IACI,QAAQ,EAAE,MAAM,CAAK;IAE5B;;OAEG;IACH,IAAW,OAAO,IAAI,UAAU,CAE/B;IAED;;OAEG;IACH,IAAW,OAAO,CAAC,KAAK,EAAE,UAAU,EAEnC;IAED;;OAEG;IACH,IAAW,cAAc,IAAI,QAAQ,GAAG,SAAS,CAEhD;IAED;;OAEG;IACH,IAAW,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAEpD;IAED;;OAEG;IACI,WAAW,EAAE,IAAI,CAAiB;IAEzC;;OAEG;IACH,SAAgB,cAAc,6CAA6C;IAE3E,kBAAkB;IACX,YAAY,IAAI,IAAI;IAY3B,kBAAkB;IACX,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;IAIpC,kBAAkB;IACX,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,GAAG,IAAI;IAI3E,kBAAkB;IACX,OAAO,IAAI,IAAI;CAMzB"}
1
+ {"version":3,"file":"InspectTextureMipsMaterial.d.ts","sourceRoot":"","sources":["../../../src/api/material/InspectTextureMipsMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;GAEG;AACH,qBAAa,0BAA0B;IAEnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,SAAS,CAAO;IACxB,6EAA6E;IAC7E,OAAO,CAAC,SAAS,CAAC,CAAoC;IACtD,sFAAsF;IACtF,OAAO,CAAC,eAAe,CAAC,CAAa;IACrC,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAAiB;IAC9C,OAAO,CAAC,mBAAmB,CAAiB;IAC5C,OAAO,CAAC,YAAY,CAAC,CAAiB;gBAEnB,SAAS,EAAE,UAAU;IAQxC,sDAAsD;IACtD,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACI,QAAQ,EAAE,MAAM,CAAK;IAE5B;;OAEG;IACH,IAAW,OAAO,IAAI,UAAU,CAE/B;IAED;;OAEG;IACH,IAAW,OAAO,CAAC,KAAK,EAAE,UAAU,EAKnC;IAED;;OAEG;IACH,IAAW,cAAc,IAAI,QAAQ,GAAG,SAAS,CAEhD;IAED;;OAEG;IACH,IAAW,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAMpD;IAED;;;OAGG;IACH,IAAW,WAAW,IAAI,cAAc,GAAG,SAAS,CAEnD;IAED,8CAA8C;IAC9C,IAAW,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,EAavD;IAED;;OAEG;IACH,SAAgB,cAAc,6CAA6C;IAE3E,kBAAkB;IACX,YAAY,IAAI,IAAI;IAO3B,kBAAkB;IACX,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;IAIpC,kBAAkB;IACX,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAO1H,kBAAkB;IACX,OAAO,IAAI,IAAI;CAMzB"}
@@ -1,7 +1,9 @@
1
1
  import { InspectTextureMipsMaterial } from "./InspectTextureMipsMaterial.js";
2
2
  import type { IFramework } from "../IFramework.js";
3
3
  import type { IMaterialFactory } from "./IMaterialFactory.js";
4
+ import { SpriteMaterial, type SpriteMaterialDescriptor } from "./SpriteMaterial.js";
4
5
  import { UnlitMaterial, UnlitMaterialDescriptor } from "./UnlitMaterial.js";
6
+ import { ForwardBlinnPhongMaterial, type ForwardBlinnPhongMaterialDescriptor } from "./ForwardBlinnPhongMaterial.js";
5
7
  /**
6
8
  * The material factory.
7
9
  */
@@ -16,5 +18,9 @@ export declare class MaterialFactory implements IMaterialFactory {
16
18
  createInspectTextureMipsMaterial(): InspectTextureMipsMaterial;
17
19
  /** @inheritDoc */
18
20
  createUnlitMaterial(descriptor?: UnlitMaterialDescriptor): UnlitMaterial;
21
+ /** @inheritDoc */
22
+ createSpriteMaterial(descriptor: SpriteMaterialDescriptor): SpriteMaterial;
23
+ /** @inheritDoc */
24
+ createForwardBlinnPhongMaterial(descriptor: ForwardBlinnPhongMaterialDescriptor): ForwardBlinnPhongMaterial;
19
25
  }
20
26
  //# sourceMappingURL=MaterialFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MaterialFactory.d.ts","sourceRoot":"","sources":["../../../src/api/material/MaterialFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAC,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAC,aAAa,EAAE,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAE1E;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAMjC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ9C;;;OAGG;gBACiC,UAAU,EAAE,UAAU;IAG1D,kBAAkB;IACX,gCAAgC,IAAI,0BAA0B;IAIrE,kBAAkB;IACX,mBAAmB,CAAC,UAAU,CAAC,EAAG,uBAAuB,GAAG,aAAa;CAGnF"}
1
+ {"version":3,"file":"MaterialFactory.d.ts","sourceRoot":"","sources":["../../../src/api/material/MaterialFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,0BAA0B,EAAC,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAC,cAAc,EAAE,KAAK,wBAAwB,EAAC,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAC,aAAa,EAAE,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAC,yBAAyB,EAAE,KAAK,mCAAmC,EAAC,MAAM,gCAAgC,CAAC;AAEnH;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAMjC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ9C;;;OAGG;gBACiC,UAAU,EAAE,UAAU;IAG1D,kBAAkB;IACX,gCAAgC,IAAI,0BAA0B;IAIrE,kBAAkB;IACX,mBAAmB,CAAC,UAAU,CAAC,EAAG,uBAAuB,GAAG,aAAa;IAIhF,kBAAkB;IACX,oBAAoB,CAAC,UAAU,EAAE,wBAAwB,GAAG,cAAc;IAIjF,kBAAkB;IACX,+BAA+B,CAAC,UAAU,EAAE,mCAAmC,GAAG,yBAAyB;CAGrH"}
@@ -0,0 +1,51 @@
1
+ import type { GeometryFormat } from "../geometry/GeometryFormat.js";
2
+ import type { IMesh } from "../meshes/IMesh.js";
3
+ import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.js";
4
+ import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.js";
5
+ import type { ITexture2D } from "../rendering/texture/ITexture2D.js";
6
+ import type { ISampler } from "../rendering/sampler/ISampler.js";
7
+ import type { IFramework } from "../IFramework.js";
8
+ import type { IUniformBuffer } from "../rendering/buffers/IUniformBuffer.js";
9
+ import type { IMaterial } from "./IMaterial.js";
10
+ /** The sprite material descriptor. */
11
+ export interface SpriteMaterialDescriptor {
12
+ /** The projection view buffer. Shared, it is not disposed by the material. */
13
+ projectionViewBuffer: IUniformBuffer;
14
+ /** The sprite texture. */
15
+ texture: ITexture2D;
16
+ /** The texture sampler. */
17
+ sampler: ISampler;
18
+ }
19
+ /**
20
+ * The sprite material.
21
+ */
22
+ export declare class SpriteMaterial implements IMaterial {
23
+ private readonly _renderPipeline;
24
+ /**
25
+ * The constructor.
26
+ * @param framework - The framework.
27
+ * @param descriptor - The sprite material descriptor.
28
+ */
29
+ constructor(framework: IFramework, descriptor: SpriteMaterialDescriptor);
30
+ /** @inheritDoc */
31
+ get geometryFormat(): GeometryFormat;
32
+ /** The sprite texture. */
33
+ get texture(): ITexture2D;
34
+ /** The sprite texture. */
35
+ set texture(value: ITexture2D);
36
+ /** @inheritDoc */
37
+ beforeRender(): void;
38
+ /** @inheritDoc */
39
+ renderMesh(mesh: IMesh): void;
40
+ /**
41
+ * Renders the material.
42
+ * @param vertexBuffer - The vertex buffer.
43
+ * @param indexBuffer - The index buffer.
44
+ * @param indicesCount - The number of indices to draw. If -1 draws all indices.
45
+ * @param indicesOffset - Indices offset. Defaults to 0.
46
+ */
47
+ render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer, indicesCount?: number, indicesOffset?: number): void;
48
+ /** @inheritDoc */
49
+ dispose(): void;
50
+ }
51
+ //# sourceMappingURL=SpriteMaterial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpriteMaterial.d.ts","sourceRoot":"","sources":["../../../src/api/material/SpriteMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,sCAAsC;AACtC,MAAM,WAAW,wBAAwB;IAErC,8EAA8E;IAC9E,oBAAoB,EAAE,cAAc,CAAC;IAErC,0BAA0B;IAC1B,OAAO,EAAE,UAAU,CAAC;IAEpB,2BAA2B;IAC3B,OAAO,EAAE,QAAQ,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,SAAS;IAE5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IAExD;;;;OAIG;gBACgB,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,wBAAwB;IAM9E,kBAAkB;IAClB,IAAW,cAAc,IAAI,cAAc,CAE1C;IAED,0BAA0B;IAC1B,IAAW,OAAO,IAAI,UAAU,CAE/B;IAED,0BAA0B;IAC1B,IAAW,OAAO,CAAC,KAAK,EAAE,UAAU,EAEnC;IAED,kBAAkB;IACX,YAAY,IAAI,IAAI;IAI3B,kBAAkB;IACX,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;IAIpC;;;;;;OAMG;IACI,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAI1H,kBAAkB;IACX,OAAO,IAAI,IAAI;CAGzB"}
@@ -1,7 +1,6 @@
1
1
  import type { IMesh } from "../meshes/IMesh.js";
2
2
  import type { ITexture2D } from "../rendering/texture/ITexture2D.js";
3
3
  import type { ISampler } from "../rendering/sampler/ISampler.js";
4
- import { mat4 } from "gl-matrix";
5
4
  import { GeometryFormat } from "../geometry/GeometryFormat.js";
6
5
  import type { IUniformBuffer } from "../rendering/buffers/IUniformBuffer.js";
7
6
  import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.js";
@@ -9,12 +8,13 @@ import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.js";
9
8
  import type { IFramework } from "../IFramework.js";
10
9
  import { Color } from "../data/Color.js";
11
10
  import type { IPrimitiveState } from "../rendering/primitive/IPrimitiveState.js";
11
+ import type { ICamera } from "../camera/ICamera.js";
12
12
  /** The additional material config options */
13
13
  export declare class UnlitMaterialDescriptor {
14
14
  /** The primitive state. */
15
15
  primitiveState?: IPrimitiveState;
16
- /** The projection view buffer to use */
17
- projectionViewBuffer?: IUniformBuffer;
16
+ /** The camera used to render this material. */
17
+ camera?: ICamera;
18
18
  }
19
19
  /**
20
20
  * Unlit material.
@@ -23,19 +23,34 @@ export declare class UnlitMaterial {
23
23
  private readonly _framework;
24
24
  private _color;
25
25
  private _materialData;
26
- private _pipeline;
26
+ /** Created when the model buffer is assigned (the pipeline requires one). */
27
+ private _pipeline?;
28
+ private readonly _primitiveState?;
29
+ /** Texture and sampler set before the pipeline exists; applied when it is created. */
30
+ private _pendingTexture?;
31
+ private _pendingSampler?;
32
+ private _samplerSet;
27
33
  private _projectionViewBuffer;
28
34
  /** False when the projection view buffer came from the descriptor. The caller owns that one. */
29
- private readonly _ownsProjectionViewBuffer;
35
+ private _ownsProjectionViewBuffer;
36
+ private _camera?;
30
37
  private _materialBuffer;
31
- private _modelBuffer;
32
- private _previousModelMatrix;
38
+ private _modelBuffer?;
33
39
  /**
34
40
  * The constructor.
35
41
  * @param framework The framework.
36
42
  * @param config The optional material descriptor. A projection view buffer passed here is shared and is not disposed by this material.
37
43
  */
38
44
  constructor(framework: IFramework, config?: UnlitMaterialDescriptor);
45
+ /** Creates the pipeline with the current bindings. */
46
+ private _createPipeline;
47
+ /**
48
+ * The camera. Setting it binds the camera's projection view buffer to the pipeline
49
+ * (the material's own placeholder buffer is disposed). Setting undefined keeps the last bound buffer.
50
+ */
51
+ get camera(): ICamera | undefined;
52
+ /** @inheritDoc */
53
+ set camera(camera: ICamera | undefined);
39
54
  /**
40
55
  * The diffuse color.
41
56
  */
@@ -57,9 +72,12 @@ export declare class UnlitMaterial {
57
72
  */
58
73
  set diffuseTextureSampler(value: ISampler | undefined);
59
74
  /**
60
- * The model matrix.
75
+ * The model buffer (std140 `mat4`). Owned by the mesh, which assigns it before drawing; never disposed by this material.
76
+ * Undefined until assigned: rendering without one throws.
61
77
  */
62
- modelMatrix: mat4;
78
+ get modelBuffer(): IUniformBuffer | undefined;
79
+ /** Binds the model buffer to the pipeline. */
80
+ set modelBuffer(value: IUniformBuffer | undefined);
63
81
  /**
64
82
  * The geometry format.
65
83
  */
@@ -69,7 +87,7 @@ export declare class UnlitMaterial {
69
87
  /** @inheritDoc */
70
88
  renderMesh(mesh: IMesh): void;
71
89
  /** @inheritDoc */
72
- render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer): void;
90
+ render(vertexBuffer: IVertexBuffer, indexBuffer: IIndexBuffer, indicesCount?: number, indicesOffset?: number): void;
73
91
  /** @inheritDoc */
74
92
  dispose(): void;
75
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UnlitMaterial.d.ts","sourceRoot":"","sources":["../../../src/api/material/UnlitMaterial.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AAEvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAEjF,6CAA6C;AAC7C,qBAAa,uBAAuB;IAEhC,2BAA2B;IACpB,cAAc,CAAC,EAAE,eAAe,CAAC;IAExC,wCAAwC;IACjC,oBAAoB,CAAC,EAAE,cAAc,CAAC;CAChD;AAGD;;GAEG;AACH,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,qBAAqB,CAAiB;IAC9C,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAU;IACpD,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,oBAAoB,CAAiB;IAE7C;;;;OAIG;gBACgB,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,uBAAuB;IAgB1E;;OAEG;IACI,YAAY,EAAE,KAAK,CAAiB;IAE3C;;OAEG;IACH,IAAW,cAAc,IAAI,UAAU,CAEtC;IAED;;OAEG;IACH,IAAW,cAAc,CAAC,KAAK,EAAE,UAAU,EAE1C;IAED;;OAEG;IACH,IAAW,qBAAqB,IAAI,QAAQ,GAAG,SAAS,CAEvD;IAED;;OAEG;IACH,IAAW,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAE3D;IAED;;OAEG;IACI,WAAW,EAAE,IAAI,CAAiB;IAEzC;;OAEG;IACH,SAAgB,cAAc,6CAA6C;IAE3E,kBAAkB;IACX,YAAY,IAAI,IAAI;IAgB3B,kBAAkB;IACX,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;IAIpC,kBAAkB;IACX,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,GAAG,IAAI;IAI3E,kBAAkB;IACX,OAAO,IAAI,IAAI;CAQzB"}
1
+ {"version":3,"file":"UnlitMaterial.d.ts","sourceRoot":"","sources":["../../../src/api/material/UnlitMaterial.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAC;AAEvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,sBAAsB,CAAC;AAElD,6CAA6C;AAC7C,qBAAa,uBAAuB;IAEhC,2BAA2B;IACpB,cAAc,CAAC,EAAE,eAAe,CAAC;IAExC,+CAA+C;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAGD;;GAEG;AACH,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,aAAa,CAAa;IAClC,6EAA6E;IAC7E,OAAO,CAAC,SAAS,CAAC,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAkB;IACnD,sFAAsF;IACtF,OAAO,CAAC,eAAe,CAAC,CAAa;IACrC,OAAO,CAAC,eAAe,CAAC,CAAW;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAAiB;IAC9C,gGAAgG;IAChG,OAAO,CAAC,yBAAyB,CAAU;IAC3C,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,YAAY,CAAC,CAAiB;IAEtC;;;;OAIG;gBACgB,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,uBAAuB;IAY1E,sDAAsD;IACtD,OAAO,CAAC,eAAe;IAiBvB;;;OAGG;IACH,IAAW,MAAM,IAAI,OAAO,GAAG,SAAS,CAEvC;IAED,kBAAkB;IAClB,IAAW,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,EAgB5C;IAED;;OAEG;IACI,YAAY,EAAE,KAAK,CAAiB;IAE3C;;OAEG;IACH,IAAW,cAAc,IAAI,UAAU,CAEtC;IAED;;OAEG;IACH,IAAW,cAAc,CAAC,KAAK,EAAE,UAAU,EAK1C;IAED;;OAEG;IACH,IAAW,qBAAqB,IAAI,QAAQ,GAAG,SAAS,CAEvD;IAED;;OAEG;IACH,IAAW,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAM3D;IAED;;;OAGG;IACH,IAAW,WAAW,IAAI,cAAc,GAAG,SAAS,CAEnD;IAED,8CAA8C;IAC9C,IAAW,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,EAavD;IAED;;OAEG;IACH,SAAgB,cAAc,6CAA6C;IAE3E,kBAAkB;IACX,YAAY,IAAI,IAAI;IAW3B,kBAAkB;IACX,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;IAIpC,kBAAkB;IACX,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAO1H,kBAAkB;IACX,OAAO,IAAI,IAAI;CAQzB"}
@@ -2,5 +2,7 @@ export * from "./IMaterial.js";
2
2
  export * from "./IMaterialFactory.js";
3
3
  export * from "./InspectTextureMipsMaterial.js";
4
4
  export * from "./MaterialFactory.js";
5
+ export * from "./SpriteMaterial.js";
5
6
  export * from "./UnlitMaterial.js";
7
+ export * from "./ForwardBlinnPhongMaterial.js";
6
8
  //# sourceMappingURL=_export.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_export.d.ts","sourceRoot":"","sources":["../../../src/api/material/_export.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"_export.d.ts","sourceRoot":"","sources":["../../../src/api/material/_export.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gCAAgC,CAAA"}
@@ -1,17 +1,47 @@
1
1
  import type { IVertexBuffer } from "../rendering/buffers/IVertexBuffer.js";
2
2
  import type { IDisposable } from "../core/IDisposable.js";
3
3
  import type { IIndexBuffer } from "../rendering/buffers/IIndexBuffer.js";
4
+ import type { IMaterial } from "../material/IMaterial.js";
5
+ import type { mat4, vec3 } from "gl-matrix";
6
+ import type { IUniformBuffer } from "../rendering/buffers/IUniformBuffer.js";
4
7
  /**
5
- * The mesh interface.
8
+ * Represents a mesh containing geometry, material information, and optionally child submeshes.
9
+ * A mesh may contain vertex and index buffers directly, or act as a container for submeshes.
10
+ * @public
6
11
  */
7
12
  export interface IMesh extends IDisposable {
13
+ /** The vertex buffer containing the mesh's vertex data, if any. */
14
+ readonly vertexBuffer?: IVertexBuffer;
15
+ /** The index buffer containing the mesh's index data, if any. */
16
+ readonly indexBuffer?: IIndexBuffer;
17
+ /** The material assigned to this mesh, if any. */
18
+ material?: IMaterial;
19
+ /** First index in {@link indexBuffer} to draw. Undefined draws from 0. */
20
+ readonly indexStart?: number;
21
+ /** Number of indices to draw. Undefined draws the whole index buffer. */
22
+ readonly indexCount?: number;
23
+ /** The child submeshes contained in this mesh, if any. */
24
+ readonly subMeshes?: IMesh[];
25
+ /** World position. Defaults to the origin. In-place edits are detected. */
26
+ position: vec3;
8
27
  /**
9
- * The positions buffer.
28
+ * Euler rotation in radians, applied in Y, X, Z order (yaw, pitch, roll): `R = Ry * Rx * Rz`.
29
+ * Defaults to (0, 0, 0). In-place edits are detected.
10
30
  */
11
- readonly vertexBuffer?: IVertexBuffer;
31
+ rotation: vec3;
32
+ /** Scale. Defaults to (1, 1, 1). In-place edits are detected. */
33
+ scale: vec3;
12
34
  /**
13
- * The indices buffer.
35
+ * The model matrix `T * R * S`, recomputed only when position, rotation or scale changed.
14
36
  */
15
- readonly indexBuffer?: IIndexBuffer;
37
+ readonly modelMatrix: mat4;
38
+ /**
39
+ * The model buffer (std140 `mat4`) holding {@link modelMatrix}. Owned by the mesh (submeshes share the parent's),
40
+ * uploaded when the transform changed and assigned to the material(s) before drawing.
41
+ * Created on first use.
42
+ */
43
+ readonly modelBuffer: IUniformBuffer;
44
+ /** Render the mesh. */
45
+ render(): void;
16
46
  }
17
47
  //# sourceMappingURL=IMesh.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IMesh.d.ts","sourceRoot":"","sources":["../../../src/api/meshes/IMesh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,KAAM,SAAQ,WAAW;IAEtC;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC;CAEvC"}
1
+ {"version":3,"file":"IMesh.d.ts","sourceRoot":"","sources":["../../../src/api/meshes/IMesh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE7E;;;;GAIG;AACH,MAAM,WAAW,KAAM,SAAQ,WAAW;IAEtC,mEAAmE;IACnE,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;IAEtC,iEAAiE;IACjE,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC;IAEpC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;IAE7B,2EAA2E;IAC3E,QAAQ,EAAE,IAAI,CAAC;IAEf;;;OAGG;IACH,QAAQ,EAAE,IAAI,CAAC;IAEf,iEAAiE;IACjE,KAAK,EAAE,IAAI,CAAC;IAEZ;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAE3B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IAErC,uBAAuB;IACvB,MAAM,IAAI,IAAI,CAAC;CAClB"}
@@ -1,19 +1,40 @@
1
1
  import type { IGeometry } from "../geometry/IGeometry.js";
2
- import { GeometryFormat } from "../geometry/GeometryFormat.js";
3
2
  import { QuadMesh } from "./QuadMesh.js";
4
3
  import { vec2 } from "gl-matrix";
5
4
  import type { IMesh } from "./IMesh.js";
5
+ import type { IMaterial } from "../material/IMaterial.js";
6
+ import type { Scene } from "../scene/Scene.js";
7
+ /** Describes one submesh: a material and the index range it draws. */
8
+ export interface SubMeshDescriptor {
9
+ /** The material. */
10
+ readonly material: IMaterial;
11
+ /** The first index of the range. */
12
+ readonly indexStart: number;
13
+ /** The number of indices in the range. */
14
+ readonly indexCount: number;
15
+ }
6
16
  /**
7
17
  * The mesh factory.
8
18
  */
9
19
  export interface IMeshFactory {
10
20
  /**
11
- * Creates a mesh.
21
+ * Creates a mesh and adds it to the scene.
22
+ * @param scene - The scene the mesh adds itself to.
23
+ * @param geometry - The geometry.
24
+ * @param material - The material.
25
+ * @returns The mesh.
26
+ */
27
+ create(scene: Scene, geometry: IGeometry, material: IMaterial): IMesh;
28
+ /**
29
+ * Creates a mesh made of submeshes that share one vertex and one index buffer.
30
+ * The mesh itself has no material; `scene.render()` (or `mesh.render()`) draws its submeshes.
31
+ * Only the mesh is added to the scene, not the submeshes.
32
+ * @param scene - The scene the mesh adds itself to.
12
33
  * @param geometry - The geometry.
13
- * @param geometryFormat - The geometry format.
34
+ * @param subMeshes - One entry per submesh. All materials must use the same geometry format.
14
35
  * @returns The mesh.
15
36
  */
16
- create(geometry: IGeometry, geometryFormat: GeometryFormat): IMesh;
37
+ createWithSubMeshes(scene: Scene, geometry: IGeometry, subMeshes: SubMeshDescriptor[]): IMesh;
17
38
  /**
18
39
  * Creates the quad mesh.
19
40
  * @param isUpdatable - Should mesh be updated after creation.
@@ -1 +1 @@
1
- {"version":3,"file":"IMeshFactory.d.ts","sourceRoot":"","sources":["../../../src/api/meshes/IMeshFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,YAAY;IAEzB;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,GAAG,KAAK,CAAC;IAEnE;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;CAChE"}
1
+ {"version":3,"file":"IMeshFactory.d.ts","sourceRoot":"","sources":["../../../src/api/meshes/IMeshFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAC9B,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAEzB;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC;IAEtE;;;;;;;;OAQG;IACH,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAC;IAE9F;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;CAChE"}