HumanBreak/docs/api/motajs-render-core/GL2Program.md

187 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# GL2Program 类 API 文档
**需丰富**
本文档由 `DeepSeek R1` 模型生成并微调。
---
## 继承关系
```mermaid
graph LR
GL2Program --> EventEmitter
```
---
## 属性说明
| 属性名 | 类型 | 说明 |
| -------------- | ------------------------ | ------------------------------------------ |
| `gl` | `WebGL2RenderingContext` | WebGL2 渲染上下文 |
| `element` | `GL2` | 关联的 GL2 渲染元素 |
| `program` | `WebGLProgram \| null` | WebGL 着色器程序对象 |
| `renderMode` | `RenderMode` | 当前渲染模式(默认 `RenderMode.Elements` |
| `usingIndices` | `IShaderIndices \| null` | 当前使用的顶点索引数组 |
---
## 方法说明
### `defineUniform`
```typescript
function defineUniform<T extends UniformType>(
uniform: string,
type: T
): IShaderUniform<T> | null;
```
**描述**
定义 Uniform 变量
**参数**
- `uniform`: Uniform 变量名
- `type`: Uniform 类型(如 `GL2.UNIFORM_2f`
**返回值**
- 操作对象(可设置值)或 `null`(定义失败)
---
### `defineTexture`
```typescript
function defineTexture(
name: string,
index: number,
w?: number,
h?: number
): IShaderTexture2D | null;
```
**描述**
定义纹理对象
**参数**
- `name`: 纹理名称
- `index`: 纹理索引(建议不超过 8
- `w`: 纹理宽度(可选)
- `h`: 纹理高度(可选)
**示例**
```typescript
const tex = program.defineTexture('diffuse', 0, 512, 512);
```
---
### `paramElements`
```typescript
function paramElements(
mode: GLenum,
count: number,
type: GLenum,
offset: number
): void;
```
**描述**
设置元素模式渲染参数
**参数**
- `mode`: 渲染模式(如 `gl.TRIANGLES`
- `count`: 元素数量
- `type`: 数据类型(如 `gl.UNSIGNED_SHORT`
- `offset`: 数据偏移量
---
### `requestCompile`
```typescript
function requestCompile(force?: boolean): boolean;
```
**描述**
请求编译着色器
**参数**
- `force`: 是否强制重新编译
**返回值**
- `true` 表示编译成功
---
### `vs`
```typescript
function vs(vs: string): void;
```
**描述**
设置顶点着色器代码
**示例**
```typescript
program.vs(`
${GL2_PREFIX.VERTEX}
in vec4 aPosition;
void main() {
gl_Position = aPosition;
}
`);
```
---
## 事件说明
| 事件名 | 触发时机 | 参数类型 |
| -------- | ---------------- | -------- |
| `load` | 程序被加载使用时 | `[]` |
| `unload` | 程序被卸载时 | `[]` |
---
## 总使用示例
```typescript
// 创建着色器程序
const program = gl2.createProgram(GL2Program);
// 定义着色器
program.vs(`
${GL2_PREFIX.VERTEX}
uniform mat4 uProjection;
in vec4 aPosition;
void main() {
gl_Position = uProjection * aPosition;
}
`);
program.fs(`
${GL2_PREFIX.FRAGMENT}
out vec4 fragColor;
uniform vec3 uColor;
void main() {
fragColor = vec4(uColor, 1.0);
}
`);
// 定义 Uniform 和纹理
const colorUniform = program.defineUniform('uColor', UniformType.Uniform3f);
const diffuseTex = program.defineTexture('diffuse', 0, 512, 512);
// 设置渲染参数
program.paramElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
// 编译并应用
if (program.requestCompile()) {
gl2.useProgram(program);
colorUniform?.set(1.0, 0.5, 0.2);
diffuseTex?.set(imageElement);
}
```