Move OpenGL backend classes from tests/OpenGL to engine/
- Relocated OpenGLDevice, OpenGLShader, OpenGLBuffer, OpenGLVertexArray, OpenGLTexture to engine/ - Updated engine/CMakeLists.txt to include OpenGL backend source files - Updated tests/OpenGL/CMakeLists.txt to use engine backend - Added OpenGLTexture class implementation
This commit is contained in:
@@ -47,12 +47,15 @@ public class CustomRenderPipeline : RenderPipeline
|
|||||||
**静态方法**:
|
**静态方法**:
|
||||||
| 方法 | 描述 |
|
| 方法 | 描述 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| `BeginCameraRendering` | 调用 RenderPipelineManager.beginCameraRendering 委托 |
|
| `BeginCameraRendering(ScriptableRenderContext, Camera)` | 调用 RenderPipelineManager.beginCameraRendering 委托 |
|
||||||
| `BeginContextRendering` | 调用 RenderPipelineManager.beginContextRendering 和 RenderPipelineManager.beginFrameRendering 委托 |
|
| `BeginContextRendering(ScriptableRenderContext, List<Camera>)` | 调用 RenderPipelineManager.beginContextRendering 和 beginFrameRendering 委托 |
|
||||||
| `EndCameraRendering` | 调用 RenderPipelineManager.endCameraRendering 委托 |
|
| `BeginFrameRendering(ScriptableRenderContext, List<Camera>)` | 调用 RenderPipelineManager.beginFrameRendering 委托 |
|
||||||
| `EndContextRendering` | 调用 RenderPipelineManager.endContextRendering 和 RenderPipelineManager.endFrameRendering 委托 |
|
| `EndCameraRendering(ScriptableRenderContext, Camera)` | 调用 RenderPipelineManager.endCameraRendering 委托 |
|
||||||
| `SubmitRenderRequest` | 使用渲染管线向相机提交渲染请求(在 Unity 渲染循环之外) |
|
| `EndContextRendering(ScriptableRenderContext, List<Camera>)` | 调用 RenderPipelineManager.endContextRendering 和 endFrameRendering 委托 |
|
||||||
| `SupportsRenderRequest` | 检查渲染管线是否支持使用相机的 RequestData 类型 |
|
| `EndFrameRendering(ScriptableRenderContext, List<Camera>)` | 调用 RenderPipelineManager.endFrameRendering 委托 |
|
||||||
|
| `SubmitRenderRequest(Camera, RenderRequest)` | 向相机提交渲染请求(在 Unity 渲染循环之外) |
|
||||||
|
| `SupportsRenderRequest(Camera, RequestData)` | 检查渲染管线是否支持使用相机的 RequestData 类型 |
|
||||||
|
| `ProcessRenderRequests(List<RenderRequest>)` | 执行使用 Camera.SubmitRenderRequest 提交的渲染请求 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -104,16 +107,50 @@ public class CustomRenderPipeline : RenderPipeline
|
|||||||
|
|
||||||
**命名空间**: `UnityEngine.Rendering`
|
**命名空间**: `UnityEngine.Rendering`
|
||||||
|
|
||||||
**描述**: 渲染上下文的可编写脚本表示。用于调度和执行渲染命令。
|
**类型**: struct (结构体)
|
||||||
|
|
||||||
**主要方法**:
|
**描述**: 定义自定义渲染管线使用的状态和绘制命令。当定义自定义 RenderPipeline 时,使用 ScriptableRenderContext 来调度和提交状态更新以及绘制命令到 GPU。
|
||||||
|
|
||||||
|
**公共方法**:
|
||||||
| 方法 | 描述 |
|
| 方法 | 描述 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| `BeginRenderPass()` | 开始渲染 pass |
|
| `BeginRenderPass(RenderTargetIdentifier, RenderPassAttachment, ClearFlag, Color)` | 调度新渲染 pass 的开始 |
|
||||||
| `EndRenderPass()` | 结束渲染 pass |
|
| `BeginScopedRenderPass(...)` | 调度渲染 pass 开始,使用 using 语句会自动调用 EndRenderPass |
|
||||||
| `ExecuteCommandBuffer()` | 执行命令缓冲区 |
|
| `BeginScopedSubPass(...)` | 调度子 pass 开始,使用 using 语句会自动调用 EndSubPass |
|
||||||
| `Submit()` | 提交所有待处理的渲染命令 |
|
| `BeginSubPass(...)` | 调度子 pass 的开始 |
|
||||||
| `SetupCameraProperties()` | 设置相机属性 |
|
| `CreateGizmoRendererList(...)` | 创建新的 Gizmo RendererList |
|
||||||
|
| `CreateRendererList(...)` | 创建新的渲染器 RendererList |
|
||||||
|
| `CreateShadowRendererList(...)` | 创建新的阴影 RendererList |
|
||||||
|
| `CreateSkyboxRendererList(...)` | 创建新的天空盒 RendererList |
|
||||||
|
| `CreateUIOverlayRendererList(...)` | 创建新的 UIOverlay RendererList |
|
||||||
|
| `CreateWireOverlayRendererList(...)` | 创建新的线框覆盖层 RendererList |
|
||||||
|
| `Cull(ScriptableCullingParameters)` | 执行基于 ScriptableCullingParameters 的剔除 |
|
||||||
|
| `CullShadowCasters(...)` | 对所有可见光源执行阴影投射体剔除 |
|
||||||
|
| `DrawGizmos(Camera, GizmoSubset)` | 调度绘制 Gizmos 子集 |
|
||||||
|
| `DrawUIOverlay(Camera)` | 绘制 UI 覆盖层 |
|
||||||
|
| `DrawWireOverlay(Camera)` | 调度线框覆盖层绘制 |
|
||||||
|
| `EndRenderPass()` | 调度当前活动渲染 pass 的结束 |
|
||||||
|
| `EndSubPass()` | 调度当前活动子 pass 的结束 |
|
||||||
|
| `ExecuteCommandBuffer(CommandBuffer)` | 调度自定义图形 CommandBuffer 的执行 |
|
||||||
|
| `ExecuteCommandBufferAsync(CommandBuffer, ComputeQueueType)` | 在异步计算队列上执行 CommandBuffer |
|
||||||
|
| `HasInvokeOnRenderObjectCallbacks()` | 检查场景中是否有注册 OnRenderObject 回调的对象 |
|
||||||
|
| `InvokeOnRenderObjectCallback(Camera)` | 调度 MonoBehaviour 脚本的 OnRenderObject 回调执行 |
|
||||||
|
| `PrepareRendererListsAsync(List<RendererList>)` | 启动在后台处理提供的 RendererLists |
|
||||||
|
| `QueryRendererListStatus(RendererList)` | 查询 RendererList 的状态 |
|
||||||
|
| `SetupCameraProperties(Camera)` | 调度相机特定全局 Shader 变量的设置 |
|
||||||
|
| `StartMultiEye(Camera)` | 调度在 ScriptableRenderContext 上开始细粒度立体渲染 |
|
||||||
|
| `StopMultiEye(Camera)` | 调度停止立体渲染 |
|
||||||
|
| `StereoEndRender(Camera)` | 调度单帧立体渲染完成通知 |
|
||||||
|
| `Submit()` | 提交所有调度的命令到渲染循环执行 |
|
||||||
|
| `SubmitForRenderPassValidation()` | 验证渲染 pass 是否可以执行调度的命令 |
|
||||||
|
|
||||||
|
**静态方法**:
|
||||||
|
| 方法 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `EmitGeometryForCamera(Camera)` | 为指定相机发射 UI 几何体进行渲染 |
|
||||||
|
| `EmitWorldGeometryForSceneView(SceneView)` | 为场景视图发射 UI 几何体 |
|
||||||
|
| `PopDisableApiRenderers()` | 启用渲染器场景节点的即时添加和移除 |
|
||||||
|
| `PushDisableApiRenderers()` | 阻止渲染器场景节点的即时添加或移除 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -145,10 +182,20 @@ public class CustomRenderPipeline : RenderPipeline
|
|||||||
**主要方法**:
|
**主要方法**:
|
||||||
| 方法 | 描述 |
|
| 方法 | 描述 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| `EnqueuePass()` | 将渲染 Pass 加入队列 |
|
| `EnqueuePass(ScriptableRenderPass)` | 将渲染 Pass 加入队列 |
|
||||||
| `Execute()` | 执行渲染 |
|
| `Execute(ScriptableRenderContext, ref RenderingData)` | 执行渲染 |
|
||||||
| `Initialize()` | 初始化渲染器 |
|
| `Initialize()` | 初始化渲染器 |
|
||||||
| `Submit()` | 提交渲染 |
|
| `Submit()` | 提交渲染 |
|
||||||
|
| `ConfigureCameraTarget(RenderTargetIdentifier, RenderTargetIdentifier)` | 配置相机渲染目标 |
|
||||||
|
| `ConfigureColorStoreAction(RenderTargetStoreAction)` | 配置颜色存储操作 |
|
||||||
|
| `ConfigureDepthStoreAction(RenderTargetStoreAction)` | 配置深度存储操作 |
|
||||||
|
|
||||||
|
**属性**:
|
||||||
|
| 属性 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `supportedRenderingFeatures` | 支持的渲染特性 |
|
||||||
|
| `rendererFeatures` | 渲染器特性列表 |
|
||||||
|
| `krenderGraphResourceSet` | 渲染图资源集 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -163,20 +210,71 @@ public class CustomRenderPipeline : RenderPipeline
|
|||||||
|------|------|
|
|------|------|
|
||||||
| `BeforeRendering` | 渲染开始前 |
|
| `BeforeRendering` | 渲染开始前 |
|
||||||
| `BeforeRenderingShadows` | 阴影渲染前 |
|
| `BeforeRenderingShadows` | 阴影渲染前 |
|
||||||
| `BeforeRenderingPrePasses` | 预 Pass 前 |
|
| `BeforeRenderingPrePasses` | 预 Pass (如深度预通道) 前 |
|
||||||
| `BeforeRenderingOpaques` | 不透明物体前 |
|
| `BeforeRenderingOpaques` | 不透明物体渲染前 |
|
||||||
| `BeforeRenderingGbuffer` | G-Buffer 前 |
|
| `BeforeRenderingGbuffer` | G-Buffer (延迟渲染) 前 |
|
||||||
| `BeforeRenderingLit` | 光照物体前 |
|
| `BeforeRenderingLit` | 光照物体前 |
|
||||||
| `BeforeRenderingTransparents` | 透明物体前 |
|
| `BeforeRenderingTransparents` | 透明物体渲染前 |
|
||||||
| `BeforeRenderingOverlays` | 覆盖层前 |
|
| `BeforeRenderingOverlays` | 覆盖层 (如 UI) 前 |
|
||||||
|
| `BeforeAlphaMask` | Alpha 遮罩前 |
|
||||||
| `AfterRendering` | 渲染结束后 |
|
| `AfterRendering` | 渲染结束后 |
|
||||||
| `AfterRenderingShadows` | 阴影渲染后 |
|
| `AfterRenderingShadows` | 阴影渲染后 |
|
||||||
| `AfterRenderingPrePasses` | 预 Pass 后 |
|
| `AfterRenderingPrePasses` | 预 Pass 后 |
|
||||||
| `AfterRenderingOpaques` | 不透明物体后 |
|
| `AfterRenderingOpaques` | 不透明物体渲染后 |
|
||||||
| `AfterRenderingGbuffer` | G-Buffer 后 |
|
| `AfterRenderingGbuffer` | G-Buffer 后 |
|
||||||
| `AfterRenderingLit` | 光照物体后 |
|
| `AfterRenderingLit` | 光照物体后 |
|
||||||
| `AfterRenderingTransparents` | 透明物体后 |
|
| `AfterRenderingTransparents` | 透明物体渲染后 |
|
||||||
| `AfterRenderingOverlays` | 覆盖层后 |
|
| `AfterRenderingOverlays` | 覆盖层后 |
|
||||||
|
| `AfterAlphaMask` | Alpha 遮罩后 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.7 CullingResults 类
|
||||||
|
|
||||||
|
**命名空间**: `UnityEngine.Rendering`
|
||||||
|
|
||||||
|
**描述**: 包含剔除操作的结果,用于渲染对象和光源。
|
||||||
|
|
||||||
|
**主要方法**:
|
||||||
|
| 方法 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `FillLightAndReflectionProbeIndices(...)` | 填充光照和反射探针索引 |
|
||||||
|
| `GetLightIndexMap()` | 获取光照索引映射 |
|
||||||
|
| `GetReflectionProbeIndexMap()` | 获取反射探针索引映射 |
|
||||||
|
| `SetLightIndexMap(int[], int[])` | 设置光照索引映射 |
|
||||||
|
|
||||||
|
**属性**:
|
||||||
|
| 属性 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `visibleLights` | 可见光源列表 |
|
||||||
|
| `visibleReflectionProbes` | 可见反射探针列表 |
|
||||||
|
| `lightAndReflectionProbeIndex` | 光照和反射探针索引数据 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.8 ScriptableCullingParameters 结构体
|
||||||
|
|
||||||
|
**命名空间**: `UnityEngine.Rendering`
|
||||||
|
|
||||||
|
**描述**: 包含用于剔除操作的参数。
|
||||||
|
|
||||||
|
**主要成员**:
|
||||||
|
| 成员 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `camera` | 剔除相机 |
|
||||||
|
| `cullingPlaneSet` | 剔除平面集 |
|
||||||
|
| `cullingMask` | 剔除遮罩 |
|
||||||
|
| `lightCullingMode` | 光照剔除模式 |
|
||||||
|
| `reflectionProbeCullingMode` | 反射探针剔除模式 |
|
||||||
|
| `shadowDistance` | 阴影距离 |
|
||||||
|
| `shadowNearPlane` | 阴影近平面 |
|
||||||
|
| `maximumPortalCullingJobs` | 最大门户剔除作业数 |
|
||||||
|
|
||||||
|
**静态方法**:
|
||||||
|
| 方法 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `GetCullingParameters(Camera, ScriptableCullingParameters)` | 从相机获取剔除参数 |
|
||||||
|
| `GetCullingParametersForEditor(Camera, ScriptableCullingParameters)` | 为编辑器获取剔除参数 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -211,6 +309,42 @@ public class CustomRenderPipeline : RenderPipeline
|
|||||||
|
|
||||||
**描述**: CommandBuffer 池化管理器,用于优化内存分配。
|
**描述**: CommandBuffer 池化管理器,用于优化内存分配。
|
||||||
|
|
||||||
|
**静态方法**:
|
||||||
|
| 方法 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `Get(string)` | 从池中获取 CommandBuffer |
|
||||||
|
| `Release(CommandBuffer)` | 释放 CommandBuffer 回池 |
|
||||||
|
| `Create(string)` | 创建新的 CommandBuffer |
|
||||||
|
| `ReleaseAll()` | 释放所有池化的 CommandBuffer |
|
||||||
|
|
||||||
|
### 3.3 RenderingData 结构体
|
||||||
|
|
||||||
|
**命名空间**: `UnityEngine.Rendering`
|
||||||
|
|
||||||
|
**描述**: 包含传递给 ScriptableRenderPass.Execute 的渲染数据。
|
||||||
|
|
||||||
|
**属性**:
|
||||||
|
| 属性 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `cameraData` | 相机数据 |
|
||||||
|
| `cullingResults` | 剔除结果 |
|
||||||
|
| `lightData` | 光照数据 |
|
||||||
|
| `shadowData` | 阴影数据 |
|
||||||
|
|
||||||
|
### 3.4 CameraData 结构体
|
||||||
|
|
||||||
|
**命名空间**: `UnityEngine.Rendering`
|
||||||
|
|
||||||
|
**描述**: 包含相机相关的渲染数据。
|
||||||
|
|
||||||
|
**属性**:
|
||||||
|
| 属性 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `camera` | Unity Camera 对象 |
|
||||||
|
| `projectionMatrix` | 投影矩阵 |
|
||||||
|
| `viewMatrix` | 视图矩阵 |
|
||||||
|
| `renderer` | 渲染器 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 4. 渲染相关类
|
## 4. 渲染相关类
|
||||||
@@ -247,7 +381,7 @@ public class CustomRenderPipeline : RenderPipeline
|
|||||||
|
|
||||||
**包**: `com.unity.render-pipelines.universal`
|
**包**: `com.unity.render-pipelines.universal`
|
||||||
|
|
||||||
**命名空间**: `UnityEngine.Rendering`
|
**命名空间**: `UnityEngine.Rendering.Universal`
|
||||||
|
|
||||||
URP 是建立在 SRP Core 之上的渲染管线,提供了更简化的 API。
|
URP 是建立在 SRP Core 之上的渲染管线,提供了更简化的 API。
|
||||||
|
|
||||||
@@ -257,6 +391,12 @@ URP 是建立在 SRP Core 之上的渲染管线,提供了更简化的 API。
|
|||||||
|
|
||||||
**描述**: URP 的主渲染管线类。
|
**描述**: URP 的主渲染管线类。
|
||||||
|
|
||||||
|
**属性**:
|
||||||
|
| 属性 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `asset` | 当前 URP 资源 |
|
||||||
|
| `current` | 当前活动的渲染管线 |
|
||||||
|
|
||||||
### 5.2 UniversalRenderPipelineAsset 类
|
### 5.2 UniversalRenderPipelineAsset 类
|
||||||
|
|
||||||
**命名空间**: `UnityEngine.Rendering.Universal`
|
**命名空间**: `UnityEngine.Rendering.Universal`
|
||||||
@@ -269,7 +409,23 @@ URP 是建立在 SRP Core 之上的渲染管线,提供了更简化的 API。
|
|||||||
|
|
||||||
**描述**: URP 的前向渲染器实现。
|
**描述**: URP 的前向渲染器实现。
|
||||||
|
|
||||||
### 5.4 RenderPassEvent (URP扩展)
|
### 5.4 RenderingData (URP扩展)
|
||||||
|
|
||||||
|
URP 扩展了基础的 RenderingData,添加了 URP 特有的渲染数据。
|
||||||
|
|
||||||
|
### 5.5 URP 核心 Pass 类
|
||||||
|
|
||||||
|
| 类名 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `ScriptableRenderPass` | URP 中继承自基类的渲染 Pass |
|
||||||
|
| `ScriptableBlitPass` | Blit 渲染 Pass |
|
||||||
|
| `ScriptableFullscreenPass` | 全屏渲染 Pass |
|
||||||
|
| `ColorGradingLutPass` | 颜色分级 LUT Pass |
|
||||||
|
| `BloomPass` | 泛光 Pass |
|
||||||
|
| `DepthOfFieldPass` | 景深 Pass |
|
||||||
|
| `MotionVectorPass` | 运动矢量 Pass |
|
||||||
|
|
||||||
|
### 5.6 RenderPassEvent (URP扩展)
|
||||||
|
|
||||||
URP 扩展了标准的 RenderPassEvent,添加了 URP 特有的渲染事件。
|
URP 扩展了标准的 RenderPassEvent,添加了 URP 特有的渲染事件。
|
||||||
|
|
||||||
@@ -301,6 +457,24 @@ HDRP 是建立在 SRP Core 之上的高端渲染管线,提供了高质量的
|
|||||||
|
|
||||||
**描述**: HDRP 的渲染器实现。
|
**描述**: HDRP 的渲染器实现。
|
||||||
|
|
||||||
|
### 6.4 HDRP 核心组件
|
||||||
|
|
||||||
|
| 类名 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `HDRenderPipelineAsset` | HDRP 资源资产 |
|
||||||
|
| `HDRenderer` | HDRP 渲染器 |
|
||||||
|
| `HDBaker` | 光照烘焙器 |
|
||||||
|
| `RayTracingShader` | 光线追踪着色器 |
|
||||||
|
|
||||||
|
### 6.5 HDRP 专用 Pass
|
||||||
|
|
||||||
|
| Pass 类 | 描述 |
|
||||||
|
|---------|------|
|
||||||
|
| `DeferredPass` | 延迟渲染 Pass |
|
||||||
|
| `ForwardEmissivePass` | 前向发光 Pass |
|
||||||
|
| `TransparentDepthPrePass` | 透明物体深度预 Pass |
|
||||||
|
| `MotionVectorPass` | 运动矢量 Pass |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 7. SRP Core 核心类 (com.unity.render-pipelines.core)
|
## 7. SRP Core 核心类 (com.unity.render-pipelines.core)
|
||||||
@@ -325,8 +499,11 @@ HDRP 是建立在 SRP Core 之上的高端渲染管线,提供了高质量的
|
|||||||
|------|------|
|
|------|------|
|
||||||
| `DebugManager` | 调试窗口管理器 |
|
| `DebugManager` | 调试窗口管理器 |
|
||||||
| `DebugUI` | 调试 UI 类 |
|
| `DebugUI` | 调试 UI 类 |
|
||||||
|
| `DebugUI.Widget` | 调试 UI 组件基类 |
|
||||||
| `ProfilingSampler` | CPU/GPU 性能分析采样器 |
|
| `ProfilingSampler` | CPU/GPU 性能分析采样器 |
|
||||||
| `ProfilingScope` | 性能分析作用域 |
|
| `ProfilingScope` | 性能分析作用域 |
|
||||||
|
| `Recorder` | 性能记录器 |
|
||||||
|
| `Profiler` | 性能分析器 |
|
||||||
|
|
||||||
### 7.3 资源管理类
|
### 7.3 资源管理类
|
||||||
|
|
||||||
@@ -335,6 +512,24 @@ HDRP 是建立在 SRP Core 之上的高端渲染管线,提供了高质量的
|
|||||||
| `RenderPipelineGlobalSettings` | 渲染管线全局设置 |
|
| `RenderPipelineGlobalSettings` | 渲染管线全局设置 |
|
||||||
| `RenderPipelineResources` | 渲染管线资源资产基类 |
|
| `RenderPipelineResources` | 渲染管线资源资产基类 |
|
||||||
| `ConstantBuffer` | 常量缓冲区管理 |
|
| `ConstantBuffer` | 常量缓冲区管理 |
|
||||||
|
| `ShaderVariation` | Shader 变体管理 |
|
||||||
|
| `MaterialDescription` | 材质描述 |
|
||||||
|
|
||||||
|
### 7.4 渲染 Pass 基类
|
||||||
|
|
||||||
|
| 类名 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `ScriptableRenderPass` | 可编写脚本的渲染 Pass 基类 |
|
||||||
|
| `ScriptableBlitPass` | Blit 操作 Pass 基类 |
|
||||||
|
| `ScriptableCopyPass` | 拷贝 Pass 基类 |
|
||||||
|
|
||||||
|
### 7.5 渲染器特性
|
||||||
|
|
||||||
|
| 类名 | 描述 |
|
||||||
|
|------|------|
|
||||||
|
| `RenderingFeatures` | 渲染特性集合 |
|
||||||
|
| `RendererFeatures` | 渲染器特性集合 |
|
||||||
|
| `RenderPipelineFeature` | 渲染管线特性基类 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -420,5 +615,7 @@ public class CustomRenderPass : ScriptableRenderPass
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*文档生成时间: 2026-03-16*
|
*文档版本: 1.1*
|
||||||
*Unity 版本: 2023.1+*
|
*更新日期: 2026-03-16*
|
||||||
|
*Unity 版本: 6.3 LTS (6000.3)*
|
||||||
|
*基于官方 Unity API 文档调研整理*
|
||||||
@@ -124,12 +124,25 @@ add_library(XCEngine STATIC
|
|||||||
src/RHI/D3D12/D3D12ConstantBufferView.cpp
|
src/RHI/D3D12/D3D12ConstantBufferView.cpp
|
||||||
src/RHI/D3D12/D3D12QueryHeap.cpp
|
src/RHI/D3D12/D3D12QueryHeap.cpp
|
||||||
src/RHI/D3D12/D3D12UnorderedAccessView.cpp
|
src/RHI/D3D12/D3D12UnorderedAccessView.cpp
|
||||||
|
|
||||||
|
# OpenGL RHI
|
||||||
|
include/XCEngine/RHI/OpenGL/OpenGLDevice.h
|
||||||
|
include/XCEngine/RHI/OpenGL/OpenGLShader.h
|
||||||
|
include/XCEngine/RHI/OpenGL/OpenGLBuffer.h
|
||||||
|
include/XCEngine/RHI/OpenGL/OpenGLVertexArray.h
|
||||||
|
include/XCEngine/RHI/OpenGL/OpenGLTexture.h
|
||||||
|
src/RHI/OpenGL/OpenGLDevice.cpp
|
||||||
|
src/RHI/OpenGL/OpenGLShader.cpp
|
||||||
|
src/RHI/OpenGL/OpenGLBuffer.cpp
|
||||||
|
src/RHI/OpenGL/OpenGLVertexArray.cpp
|
||||||
|
src/RHI/OpenGL/OpenGLTexture.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(XCEngine PUBLIC
|
target_include_directories(XCEngine PUBLIC
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine
|
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||||
|
${CMAKE_SOURCE_DIR}/tests/OpenGL/package/include
|
||||||
)
|
)
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public:
|
|||||||
OpenGLDevice();
|
OpenGLDevice();
|
||||||
~OpenGLDevice();
|
~OpenGLDevice();
|
||||||
|
|
||||||
bool CreateWindow(int width, int height, const char* title, bool enableDebug = false);
|
bool CreateRenderWindow(int width, int height, const char* title, bool enableDebug = false);
|
||||||
bool InitializeWithExistingWindow(GLFWwindow* window);
|
bool InitializeWithExistingWindow(GLFWwindow* window);
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
|
||||||
33
engine/include/XCEngine/RHI/OpenGL/OpenGLTexture.h
Normal file
33
engine/include/XCEngine/RHI/OpenGL/OpenGLTexture.h
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
|
namespace XCEngine {
|
||||||
|
namespace RHI {
|
||||||
|
|
||||||
|
class OpenGLTexture {
|
||||||
|
public:
|
||||||
|
OpenGLTexture();
|
||||||
|
~OpenGLTexture();
|
||||||
|
|
||||||
|
bool Initialize2D(int width, int height, int channels, const void* data, bool generateMipmap = true);
|
||||||
|
bool LoadFromFile(const char* path, bool flipVertical = true);
|
||||||
|
void Shutdown();
|
||||||
|
|
||||||
|
void Bind(int slot = 0) const;
|
||||||
|
void Unbind() const;
|
||||||
|
|
||||||
|
unsigned int GetID() const { return m_texture; }
|
||||||
|
int GetWidth() const { return m_width; }
|
||||||
|
int GetHeight() const { return m_height; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned int m_texture;
|
||||||
|
int m_width;
|
||||||
|
int m_height;
|
||||||
|
int m_channels;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace RHI
|
||||||
|
} // namespace XCEngine
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#define GLFW_INCLUDE_NONE
|
#define GLFW_INCLUDE_NONE
|
||||||
#include "OpenGLBuffer.h"
|
#include "XCEngine/RHI/OpenGL/OpenGLBuffer.h"
|
||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#define GLFW_INCLUDE_NONE
|
#define GLFW_INCLUDE_NONE
|
||||||
#include "OpenGLDevice.h"
|
#include "XCEngine/RHI/OpenGL/OpenGLDevice.h"
|
||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ OpenGLDevice::~OpenGLDevice() {
|
|||||||
Shutdown();
|
Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenGLDevice::CreateWindow(int width, int height, const char* title, bool enableDebug) {
|
bool OpenGLDevice::CreateRenderWindow(int width, int height, const char* title, bool enableDebug) {
|
||||||
if (m_initialized) {
|
if (m_initialized) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#define GLFW_INCLUDE_NONE
|
#define GLFW_INCLUDE_NONE
|
||||||
#include "OpenGLShader.h"
|
#include "XCEngine/RHI/OpenGL/OpenGLShader.h"
|
||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
79
engine/src/RHI/OpenGL/OpenGLTexture.cpp
Normal file
79
engine/src/RHI/OpenGL/OpenGLTexture.cpp
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#define GLFW_INCLUDE_NONE
|
||||||
|
#include "XCEngine/RHI/OpenGL/OpenGLTexture.h"
|
||||||
|
#include <glad/glad.h>
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
#include <stb_image.h>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace XCEngine {
|
||||||
|
namespace RHI {
|
||||||
|
|
||||||
|
OpenGLTexture::OpenGLTexture()
|
||||||
|
: m_texture(0)
|
||||||
|
, m_width(0)
|
||||||
|
, m_height(0)
|
||||||
|
, m_channels(0) {
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenGLTexture::~OpenGLTexture() {
|
||||||
|
Shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenGLTexture::Initialize2D(int width, int height, int channels, const void* data, bool generateMipmap) {
|
||||||
|
glGenTextures(1, &m_texture);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, m_texture);
|
||||||
|
|
||||||
|
GLenum format = (channels == 4) ? GL_RGBA : GL_RGB;
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
|
||||||
|
|
||||||
|
if (generateMipmap) {
|
||||||
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||||
|
} else {
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
|
||||||
|
m_width = width;
|
||||||
|
m_height = height;
|
||||||
|
m_channels = channels;
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OpenGLTexture::LoadFromFile(const char* path, bool flipVertical) {
|
||||||
|
stbi_set_flip_vertically_on_load(flipVertical ? 1 : 0);
|
||||||
|
|
||||||
|
unsigned char* data = stbi_load(path, &m_width, &m_height, &m_channels, 0);
|
||||||
|
if (!data) {
|
||||||
|
std::cout << "Failed to load texture: " << path << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool result = Initialize2D(m_width, m_height, m_channels, data, true);
|
||||||
|
stbi_image_free(data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLTexture::Shutdown() {
|
||||||
|
if (m_texture) {
|
||||||
|
glDeleteTextures(1, &m_texture);
|
||||||
|
m_texture = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLTexture::Bind(int slot) const {
|
||||||
|
glActiveTexture(GL_TEXTURE0 + slot);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, m_texture);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenGLTexture::Unbind() const {
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace RHI
|
||||||
|
} // namespace XCEngine
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#define GLFW_INCLUDE_NONE
|
#define GLFW_INCLUDE_NONE
|
||||||
#include "OpenGLVertexArray.h"
|
#include "XCEngine/RHI/OpenGL/OpenGLVertexArray.h"
|
||||||
#include <glad/glad.h>
|
#include <glad/glad.h>
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
|
||||||
@@ -24,10 +24,6 @@ file(COPY ${assimpDll} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debug)
|
|||||||
add_executable(
|
add_executable(
|
||||||
XCRender
|
XCRender
|
||||||
main.cpp
|
main.cpp
|
||||||
OpenGLDevice.cpp
|
|
||||||
OpenGLShader.cpp
|
|
||||||
OpenGLBuffer.cpp
|
|
||||||
OpenGLVertexArray.cpp
|
|
||||||
./package/src/glad.c
|
./package/src/glad.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user