|
@@ -13,6 +13,7 @@ class LightBuffer {
|
|
|
final SPOT_LIGHT_INFO_SIZE = 8;
|
|
|
final DIR_LIGHT_INFO_SIZE = 5;
|
|
|
|
|
|
+
|
|
|
public function new() {
|
|
|
createBuffers();
|
|
|
}
|
|
@@ -76,6 +77,8 @@ class LightBuffer {
|
|
|
}
|
|
|
|
|
|
public function sync( ctx : h3d.scene.RenderContext ) {
|
|
|
+ if (defaultForwardShader.lightInfos.isDisposed())
|
|
|
+ createBuffers();
|
|
|
|
|
|
var r = @:privateAccess ctx.scene.renderer;
|
|
|
var pbrRenderer = Std.downcast(r, Renderer);
|
|
@@ -83,6 +86,7 @@ class LightBuffer {
|
|
|
var p : h3d.scene.pbr.Renderer.RenderProps = pbrRenderer.props;
|
|
|
var s = defaultForwardShader;
|
|
|
|
|
|
+
|
|
|
s.cameraPosition = ctx.camera.pos;
|
|
|
s.emissivePower = p.emissive * p.emissive;
|
|
|
|
|
@@ -166,7 +170,6 @@ class LightBuffer {
|
|
|
|
|
|
l = l.next;
|
|
|
}
|
|
|
-
|
|
|
s.lightInfos.uploadVector(lightInfos, 0, s.lightInfos.vertices, 0);
|
|
|
|
|
|
var pbrIndirect = @:privateAccess pbrRenderer.pbrIndirect;
|
|
@@ -180,4 +183,8 @@ class LightBuffer {
|
|
|
s.irrSpecularLevels = pbrIndirect.irrSpecularLevels;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public function dispose() {
|
|
|
+ defaultForwardShader.lightInfos.dispose();
|
|
|
+ }
|
|
|
}
|