Home › Forums › Games202-高质量实时渲染 › [作业1]关于CPU和GPU同步问题 › Reply To: [作业1]关于CPU和GPU同步问题
DCXC
Participant
框架封装的WebGLRenderer里面写得很清楚,是先draw light, 再Shadow pass,最后Camera pass。
render() {
const gl = this.gl;
gl.clearColor(0.0, 0.0, 0.0, 1.0); // Clear to black, fully opaque
gl.clearDepth(1.0); // Clear everything
gl.enable(gl.DEPTH_TEST); // Enable depth testing
gl.depthFunc(gl.LEQUAL); // Near things obscure far things
console.assert(this.lights.length != 0, "No light");
console.assert(this.lights.length == 1, "Multiple lights");
for (let l = 0; l < this.lights.length; l++) {
// Draw light
// TODO: Support all kinds of transform
this.lights[l].meshRender.mesh.transform.translate = this.lights[l].entity.lightPos;
this.lights[l].meshRender.draw(this.camera);
// Shadow pass
if (this.lights[l].entity.hasShadowMap == true) {
for (let i = 0; i < this.shadowMeshes.length; i++) {
this.shadowMeshes[i].draw(this.camera);
}
}
// Camera pass
for (let i = 0; i < this.meshes.length; i++) {
this.gl.useProgram(this.meshes[i].shader.program.glShaderProgram);
this.gl.uniform3fv(this.meshes[i].shader.program.uniforms.uLightPos, this.lights[l].entity.lightPos);
this.meshes[i].draw(this.camera);
}
}
}