Threejs源码系列- WebGLRenderer (2)

67 阅读4分钟
import { WebGLAnimation } from './webgl/WebGLAnimation.js';
import { WebGLAttributes } from './webgl/WebGLAttributes.js';
import { WebGLBackground } from './webgl/WebGLBackground.js';
import { WebGLBindingStates } from './webgl/WebGLBindingStates.js';
import { WebGLBufferRenderer } from './webgl/WebGLBufferRenderer.js';
import { WebGLCapabilities } from './webgl/WebGLCapabilities.js';
import { WebGLClipping } from './webgl/WebGLClipping.js';
import { WebGLCubeMaps } from './webgl/WebGLCubeMaps.js';
import { WebGLCubeUVMaps } from './webgl/WebGLCubeUVMaps.js';
import { WebGLExtensions } from './webgl/WebGLExtensions.js';
import { WebGLGeometries } from './webgl/WebGLGeometries.js';
import { WebGLIndexedBufferRenderer } from './webgl/WebGLIndexedBufferRenderer.js';
import { WebGLInfo } from './webgl/WebGLInfo.js';
import { WebGLMorphtargets } from './webgl/WebGLMorphtargets.js';
import { WebGLObjects } from './webgl/WebGLObjects.js';
import { WebGLPrograms } from './webgl/WebGLPrograms.js';
import { WebGLProperties } from './webgl/WebGLProperties.js';
import { WebGLRenderLists } from './webgl/WebGLRenderLists.js';
import { WebGLRenderStates } from './webgl/WebGLRenderStates.js';
import { WebGLRenderTarget } from './WebGLRenderTarget.js';
import { WebGLShadowMap } from './webgl/WebGLShadowMap.js';
import { WebGLState } from './webgl/WebGLState.js';
import { WebGLTextures } from './webgl/WebGLTextures.js';
import { WebGLUniforms } from './webgl/WebGLUniforms.js';
import { WebGLUtils } from './webgl/WebGLUtils.js';
import { WebXRManager } from './webxr/WebXRManager.js';
import { WebGLMaterials } from './webgl/WebGLMaterials.js';
import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
import { createCanvasElement, probeAsync, warnOnce } from '../utils.js';
import { ColorManagement } from '../math/ColorManagement.js';
  • WebGLAnimation:管理 WebGL 渲染器中的动画循环,负责处理动画帧的请求、启动和停止动画,以及关联动画回调函数。

  • WebGLAttributes:处理 WebGL 中的顶点属性数据,管理缓冲区(如顶点缓冲区对象 VBO)的创建、更新和删除,确保几何体的属性数据正确传递到 GPU。

  • WebGLBackground:负责渲染场景的背景,包括纯色背景、纹理背景或天空盒(CubeMap),处理背景的透明度和混合模式。

  • WebGLBindingStates:管理 WebGL 资源(如顶点数组对象 VAO、缓冲区、纹理)的绑定状态,避免重复绑定(优化性能)。

  • WebGLBufferRenderer:用于渲染非索引化的几何体(如 BufferGeometry 无索引数据),处理顶点数据的绘制调用。

  • WebGLCapabilities:检测和存储当前 WebGL 上下文的能力(如支持的扩展、最大纹理尺寸、是否支持浮点纹理等),为渲染器提供硬件能力参考。

  • WebGLClipping:处理裁剪平面相关逻辑,包括全局裁剪平面和对象级局部裁剪平面,确保符合裁剪条件的像素被正确剔除。

  • WebGLCubeMaps:管理立方体贴图(CubeMap)的加载、更新和绑定,支持场景环境贴图、反射 / 折射效果等。

  • WebGLCubeUVMaps:处理基于 UV 映射的立方体贴图(如用于高效环境贴图采样的 CubeUV 格式),优化环境光反射的渲染性能。

  • WebGLExtensions:管理 WebGL 扩展的加载和查询(如 OES_texture_float、WEBGL_depth_texture 等),为渲染器提供额外的 WebGL 功能支持。

  • WebGLGeometries:管理几何体数据在 WebGL 中的生命周期,包括缓冲区的创建、更新和释放,协调几何体与渲染状态的交互。

  • WebGLIndexedBufferRenderer:用于渲染索引化的几何体(如带索引的 BufferGeometry),通过索引缓冲区(IBO)实现顶点复用,减少数据传输。

  • WebGLInfo:收集和提供渲染统计信息(如绘制调用次数、三角形数量、纹理 / 缓冲区内存使用量等),用于性能监控和调试。

  • WebGLMorphtargets:处理变形目标(Morph Targets)动画,管理相关顶点数据的更新和 shader uniforms 传递,实现模型的平滑变形效果。

  • WebGLObjects:管理渲染对象(如网格、线条、点)的 WebGL 资源映射,将 Three.js 对象转换为 WebGL 可渲染的格式(如关联几何体和材质)。

  • WebGLPrograms:负责着色器程序(顶点着色器和片段着色器)的创建、编译、链接和缓存,根据材质和渲染状态生成合适的 shader 代码。

  • WebGLProperties:存储 Three.js 对象与 WebGL 底层资源的关联信息(如纹理 ID、缓冲区句柄等),实现 JavaScript 对象到 WebGL 资源的映射。

  • WebGLRenderLists:构建和管理渲染列表,根据对象的可见性、材质透明度等对渲染对象进行排序和分组,优化渲染顺序(如先不透明后透明)。

  • WebGLRenderStates:管理渲染状态(如灯光、阴影、裁剪平面等)的上下文,确保嵌套渲染调用(如渲染到纹理时)的状态隔离。

  • WebGLRenderTarget:表示渲染目标(离屏帧缓冲区),支持将场景渲染到纹理而非屏幕,用于后期处理、反射效果等。

  • WebGLShadowMap:处理阴影渲染,包括阴影贴图的生成、更新和采样,支持不同的阴影类型(如 PCF 软阴影)

  • WebGLState:管理 WebGL 上下文状态(如混合模式、深度测试、多边形偏移等),确保渲染过程中状态的正确切换和恢复。

  • WebGLTextures:管理纹理的加载、上传、更新和绑定,处理不同类型的纹理(如 2D 纹理、3D 纹理、数组纹理)及纹理参数(过滤、缠绕模式等)。

  • WebGLUniforms:处理着色器 uniforms 数据的上传,将 Three.js 中的变量(如矩阵、颜色、灯光参数)传递到 shader 中。

  • WebGLUtils:提供 WebGL 相关的工具函数,如类型转换、格式验证、错误处理等,辅助其他模块处理底层 WebGL 操作。

  • WebXRManager:集成 WebXR 功能,支持虚拟现实(VR)和增强现实(AR)渲染,处理 XR 设备的上下文管理和帧同步。

  • WebGLMaterials:管理材质与 WebGL 着色器程序的匹配,处理材质参数的更新和 uniform 变量的映射,确保材质特性正确渲染。

  • WebGLUniformsGroups:管理 uniforms 组,将相关的 uniforms 打包传递,优化 shader uniform 数据的上传效率。

  • ColorManagement:处理颜色空间转换(如线性空间与 sRGB 空间),确保渲染颜色在不同设备和环境中的一致性。