Skip to content

Commit 65c83ad

Browse files
committed
refactor: ubo Camera updateBuffer & create Buffer(重构CameraUBO的更新buffer和创建Buffer)
1 parent c8ad001 commit 65c83ad

File tree

7 files changed

+34
-62
lines changed

7 files changed

+34
-62
lines changed

src/layaAir/laya/RenderDriver/WebGLDriver/3DRenderPass/WebGLDirectLightShadowRP.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,8 @@ export class WebGLDirectLightShadowRP {
206206
context.setScissor(Vector4.TEMP);
207207
}
208208

209-
if (Config._uniformBlock) {
209+
if (Config._uniformBlock) {//TODO:处理shadowmap的ubo
210210
shaderValues.updateUBOBuffer(Scene3D.UBONAME_SHADOW);
211-
sliceData.cameraShaderValue.updateUBOBuffer(BaseCamera.UBONAME_CAMERA);
212211
}
213212

214213
context.setClearData(RenderClearFlag.Depth, Color.BLACK, 1, 0);

src/layaAir/laya/RenderDriver/WebGLDriver/3DRenderPass/WebGLRenderContext3D.ts

+5
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { InternalRenderTarget } from "../../DriverDesign/RenderDevice/InternalRe
1313
import { WebCameraNodeData, WebSceneNodeData } from "../../RenderModuleData/WebModuleData/3D/WebModuleData";
1414
import { WebDefineDatas } from "../../RenderModuleData/WebModuleData/WebDefineDatas";
1515
import { WebGLShaderData } from "../../RenderModuleData/WebModuleData/WebGLShaderData";
16+
import { WebGLCommandUniformMap } from "../RenderDevice/WebGLCommandUniformMap";
1617
import { WebGLEngine } from "../RenderDevice/WebGLEngine";
1718
import { WebGLRenderElement3D } from "./WebGLRenderElement3D";
1819

@@ -68,6 +69,10 @@ export class WebGLRenderContext3D implements IRenderContext3D {
6869

6970
set cameraData(value: WebGLShaderData) {
7071
this._cameraData = value;
72+
if (value) {
73+
value.createUniformBuffer("BaseCamera", <WebGLCommandUniformMap>LayaGL.renderDeviceFactory.createGlobalUniformMap("BaseCamera"));
74+
value.updateUBOBuffer("BaseCamera");
75+
}
7176
}
7277

7378
get sceneModuleData(): WebSceneNodeData {

src/layaAir/laya/RenderDriver/WebGLDriver/3DRenderPass/WebGLSpotLightShadowRP.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,8 @@ export class WebGLSpotLightShadowRP {
120120
context.setViewPort(Viewport.TEMP);
121121
context.setScissor(Vector4.TEMP);
122122

123-
if (Config._uniformBlock) {
123+
if (Config._uniformBlock) {//TODO:
124124
shaderValues.updateUBOBuffer(Scene3D.UBONAME_SHADOW);
125-
shadowSpotData.cameraShaderValue.updateUBOBuffer(BaseCamera.UBONAME_CAMERA);
126125
}
127126

128127
context.setClearData(RenderClearFlag.Depth, Color.BLACK, 1, 0);

src/layaAir/laya/d3/core/BaseCamera.ts

+12-31
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ export class BaseCamera extends Sprite3D {
2727
*/
2828
static cameraUniformMap: CommandUniformMap;
2929

30-
static caemraUBOUnifromMap: CommandUniformMap;
31-
32-
static UBONAME_CAMERA = "CameraUniformBlock";
30+
static cameraBlockName: string = "BaseCamera";
3331

3432
/**Camera Uniform PropertyID */
3533
/**@internal */
@@ -92,7 +90,7 @@ export class BaseCamera extends Sprite3D {
9290
BaseCamera.SHADERDEFINE_DEPTHNORMALS = Shader3D.getDefineByName("DEPTHNORMALSMAP");
9391
BaseCamera.SHADERDEFINE_ORTHOGRAPHIC = Shader3D.getDefineByName("CAMERAORTHOGRAPHIC");
9492
BaseCamera.SHADERDEFINE_FXAA = Shader3D.getDefineByName("FXAA");
95-
let camerauniformMap = BaseCamera.cameraUniformMap = LayaGL.renderDeviceFactory.createGlobalUniformMap("BaseCamera");
93+
9694

9795
BaseCamera.CAMERAPOS = Shader3D.propertyNameToID("u_CameraPos");
9896
BaseCamera.VIEWMATRIX = Shader3D.propertyNameToID("u_View");
@@ -107,30 +105,16 @@ export class BaseCamera extends Sprite3D {
107105
BaseCamera.OPAQUETEXTURE = Shader3D.propertyNameToID("u_CameraOpaqueTexture");
108106
BaseCamera.OPAQUETEXTUREPARAMS = Shader3D.propertyNameToID("u_OpaqueTextureParams");
109107
BaseCamera.DEPTHZBUFFERPARAMS = Shader3D.propertyNameToID("u_ZBufferParams");
110-
111-
if (Config._uniformBlock) {
112-
BaseCamera.CAMERAUNIFORMBLOCK = Shader3D.propertyNameToID(BaseCamera.UBONAME_CAMERA);
113-
camerauniformMap.addShaderUniform(BaseCamera.CAMERAUNIFORMBLOCK, BaseCamera.UBONAME_CAMERA, ShaderDataType.None);
114-
let ubomap = BaseCamera.caemraUBOUnifromMap = LayaGL.renderDeviceFactory.createGlobalUniformMap(BaseCamera.UBONAME_CAMERA);
115-
ubomap.addShaderUniform(BaseCamera.VIEWMATRIX, "u_View", ShaderDataType.Matrix4x4);
116-
ubomap.addShaderUniform(BaseCamera.PROJECTMATRIX, "u_Projection", ShaderDataType.Matrix4x4);
117-
ubomap.addShaderUniform(BaseCamera.VIEWPROJECTMATRIX, "u_ViewProjection", ShaderDataType.Matrix4x4);
118-
ubomap.addShaderUniform(BaseCamera.PROJECTION_PARAMS, "u_ProjectionParams", ShaderDataType.Vector4);
119-
ubomap.addShaderUniform(BaseCamera.VIEWPORT, "u_Viewport", ShaderDataType.Vector4);
120-
ubomap.addShaderUniform(BaseCamera.CAMERADIRECTION, "u_CameraDirection", ShaderDataType.Vector3);
121-
ubomap.addShaderUniform(BaseCamera.CAMERAUP, "u_CameraUp", ShaderDataType.Vector3);
122-
ubomap.addShaderUniform(BaseCamera.CAMERAPOS, "u_CameraPos", ShaderDataType.Vector3);
123-
124-
} else {
125-
camerauniformMap.addShaderUniform(BaseCamera.CAMERAPOS, "u_CameraPos", ShaderDataType.Vector3);
126-
camerauniformMap.addShaderUniform(BaseCamera.VIEWMATRIX, "u_View", ShaderDataType.Matrix4x4);
127-
camerauniformMap.addShaderUniform(BaseCamera.PROJECTMATRIX, "u_Projection", ShaderDataType.Matrix4x4);
128-
camerauniformMap.addShaderUniform(BaseCamera.VIEWPROJECTMATRIX, "u_ViewProjection", ShaderDataType.Matrix4x4);
129-
camerauniformMap.addShaderUniform(BaseCamera.CAMERADIRECTION, "u_CameraDirection", ShaderDataType.Vector3);
130-
camerauniformMap.addShaderUniform(BaseCamera.CAMERAUP, "u_CameraUp", ShaderDataType.Vector3);
131-
camerauniformMap.addShaderUniform(BaseCamera.VIEWPORT, "u_Viewport", ShaderDataType.Vector4);
132-
camerauniformMap.addShaderUniform(BaseCamera.PROJECTION_PARAMS, "u_ProjectionParams", ShaderDataType.Vector4);
133-
}
108+
//add property to camerauniformMap
109+
let camerauniformMap = BaseCamera.cameraUniformMap = LayaGL.renderDeviceFactory.createGlobalUniformMap(BaseCamera.cameraBlockName);
110+
camerauniformMap.addShaderUniform(BaseCamera.CAMERAPOS, "u_CameraPos", ShaderDataType.Vector3);
111+
camerauniformMap.addShaderUniform(BaseCamera.VIEWMATRIX, "u_View", ShaderDataType.Matrix4x4);
112+
camerauniformMap.addShaderUniform(BaseCamera.PROJECTMATRIX, "u_Projection", ShaderDataType.Matrix4x4);
113+
camerauniformMap.addShaderUniform(BaseCamera.VIEWPROJECTMATRIX, "u_ViewProjection", ShaderDataType.Matrix4x4);
114+
camerauniformMap.addShaderUniform(BaseCamera.CAMERADIRECTION, "u_CameraDirection", ShaderDataType.Vector3);
115+
camerauniformMap.addShaderUniform(BaseCamera.CAMERAUP, "u_CameraUp", ShaderDataType.Vector3);
116+
camerauniformMap.addShaderUniform(BaseCamera.VIEWPORT, "u_Viewport", ShaderDataType.Vector4);
117+
camerauniformMap.addShaderUniform(BaseCamera.PROJECTION_PARAMS, "u_ProjectionParams", ShaderDataType.Vector4);
134118
camerauniformMap.addShaderUniform(BaseCamera.DEPTHTEXTURE, "u_CameraDepthTexture", ShaderDataType.Texture2D);
135119
camerauniformMap.addShaderUniform(BaseCamera.DEPTHNORMALSTEXTURE, "u_CameraDepthNormalsTexture", ShaderDataType.Texture2D);
136120
camerauniformMap.addShaderUniform(BaseCamera.OPAQUETEXTURE, "u_CameraOpaqueTexture", ShaderDataType.Texture2D);
@@ -388,9 +372,6 @@ export class BaseCamera extends Sprite3D {
388372
this.useOcclusionCulling = true;
389373
this._renderEngine = LayaGL.renderEngine;
390374
this._orthographic = false;
391-
if (Config._uniformBlock) {
392-
this._shaderValues.createUniformBuffer(BaseCamera.UBONAME_CAMERA, BaseCamera.caemraUBOUnifromMap);
393-
}
394375

395376
this._skyRenderElement = new SkyRenderElement();
396377
}

src/layaAir/laya/d3/core/Camera.ts

-4
Original file line numberDiff line numberDiff line change
@@ -1374,10 +1374,6 @@ export class Camera extends BaseCamera {
13741374
this._prepareCameraToRender();
13751375
this._applyViewProject(this.viewMatrix, this.projectionMatrix, context.invertY);
13761376
this._contextApply(context);
1377-
// todo proterty name
1378-
if (Config._uniformBlock) {
1379-
this._shaderValues.updateUBOBuffer(BaseCamera.UBONAME_CAMERA);
1380-
}
13811377

13821378
if (this.clearFlag == CameraClearFlags.Sky) {
13831379
scene.skyRenderer.setRenderElement(this.skyRenderElement);

src/layaAir/laya/d3/shader/common/CameraCommon.glsl

+15-13
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,36 @@
33

44
#ifdef ENUNIFORMBLOCK
55

6-
uniform CameraUniformBlock
6+
uniform BaseCamera
77
{
8+
vec3 u_CameraPos;
89
mat4 u_View;
910
mat4 u_Projection;
1011
mat4 u_ViewProjection;
11-
vec4 u_ProjectionParams; // x: near, y: far, z: invert, w: 1/far
12-
vec4 u_Viewport; // x,y,width,height
1312
vec3 u_CameraDirection;
1413
vec3 u_CameraUp;
15-
vec3 u_CameraPos;
14+
vec4 u_Viewport;
15+
vec4 u_ProjectionParams;
16+
vec4 u_OpaqueTextureParams;
17+
vec4 u_ZBufferParams;
1618
};
1719
#else
20+
uniform vec3 u_CameraPos;
1821
uniform mat4 u_View;
1922
uniform mat4 u_Projection;
2023
uniform mat4 u_ViewProjection;
21-
uniform vec4 u_ProjectionParams; // x: near, y: far, z: invert, w: 1/far
22-
uniform vec4 u_Viewport; // x, y, width, height
2324
uniform vec3 u_CameraDirection;
2425
uniform vec3 u_CameraUp;
25-
uniform vec3 u_CameraPos;
26+
uniform vec4 u_Viewport;
27+
uniform vec4 u_ProjectionParams;
28+
uniform vec4 u_OpaqueTextureParams;
29+
uniform vec4 u_ZBufferParams;
2630
#endif // ENUNIFORMBLOCK
2731

28-
/*Depth or DepthNormal Uniform*/
29-
uniform highp sampler2D u_CameraDepthTexture;
30-
uniform vec4 u_ZBufferParams; //(1.0 - far / near, far / near, (near - far) / (near * far), 1 / near)
31-
uniform mediump sampler2D u_CameraDepthNormalsTexture;
32-
uniform mediump sampler2D u_CameraOpaqueTexture;
33-
uniform vec4 u_OpaqueTextureParams;
32+
uniform sampler2D u_CameraDepthTexture;
33+
uniform sampler2D u_CameraDepthNormalsTexture;
34+
uniform sampler2D u_CameraOpaqueTexture;
35+
3436

3537
vec4 getPositionCS(in vec3 positionWS)
3638
{

src/layaAir/laya/d3/shadowMap/ShadowSliceData.ts

-10
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,6 @@ export class ShadowSpotData {
140140
*/
141141
constructor() {
142142
this.cameraShaderValue = LayaGL.renderDeviceFactory.createShaderData(null);
143-
144-
if (Config._uniformBlock) {
145-
this.cameraShaderValue.createUniformBuffer(BaseCamera.UBONAME_CAMERA, BaseCamera.caemraUBOUnifromMap);
146-
}
147-
148143
this.cameraCullInfo = new CameraCullInfo();
149144

150145
}
@@ -240,11 +235,6 @@ export class ShadowSliceData {
240235
*/
241236
constructor() {
242237
this.cameraShaderValue = LayaGL.renderDeviceFactory.createShaderData(null);
243-
244-
if (Config._uniformBlock) {
245-
this.cameraShaderValue.createUniformBuffer(BaseCamera.UBONAME_CAMERA, BaseCamera.caemraUBOUnifromMap);
246-
}
247-
248238
}
249239

250240
destroy() {

0 commit comments

Comments
 (0)