mirror of
https://github.com/motajs/template.git
synced 2026-11-05 08:44:30 +08:00
feat: 将 HumanBreak 新内容移植入该样板
This commit is contained in:
1 parent
6bf32174d8
commit
bea2725d6a
128 files changed
+11984
-573
No files matched your search
@@ -0,0 +1,86 @@
|
||||
import { logger } from '@motajs/common';
|
||||
|
||||
export interface ICompiledProgram {
|
||||
/** 着色器程序 */
|
||||
readonly program: WebGLProgram;
|
||||
/** 顶点着色器对象 */
|
||||
readonly vertexShader: WebGLShader;
|
||||
/** 片段着色器对象 */
|
||||
readonly fragmentShader: WebGLShader;
|
||||
}
|
||||
|
||||
/**
|
||||
* 编译着色器
|
||||
* @param gl WebGL2 上下文
|
||||
* @param type 着色器类型
|
||||
* @param source 着色器代码
|
||||
*/
|
||||
export function compileShader(
|
||||
gl: WebGL2RenderingContext,
|
||||
type: number,
|
||||
source: string
|
||||
): WebGLShader | null {
|
||||
const shader = gl.createShader(type);
|
||||
if (!shader) return null;
|
||||
gl.shaderSource(shader, source);
|
||||
gl.compileShader(shader);
|
||||
|
||||
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
||||
const info = gl.getShaderInfoLog(shader);
|
||||
const typeStr = type === gl.VERTEX_SHADER ? 'vertex' : 'fragment';
|
||||
logger.error(10, typeStr, info ?? '');
|
||||
return null;
|
||||
}
|
||||
|
||||
return shader;
|
||||
}
|
||||
|
||||
/**
|
||||
* 编译链接着色器程序
|
||||
* @param gl WebGL2 上下文
|
||||
* @param vs 顶点着色器对象
|
||||
* @param fs 片段着色器对象
|
||||
*/
|
||||
export function compileProgram(
|
||||
gl: WebGL2RenderingContext,
|
||||
vs: WebGLShader,
|
||||
fs: WebGLShader
|
||||
) {
|
||||
const program = gl.createProgram();
|
||||
gl.attachShader(program, vs);
|
||||
gl.attachShader(program, fs);
|
||||
gl.linkProgram(program);
|
||||
|
||||
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
||||
const info = gl.getProgramInfoLog(program);
|
||||
logger.error(9, info ?? '');
|
||||
return null;
|
||||
}
|
||||
|
||||
return program;
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用指定着色器代码编译链接程序
|
||||
* @param gl WebGL2 上下文
|
||||
* @param vs 顶点着色器代码
|
||||
* @param fs 片段着色器代码
|
||||
*/
|
||||
export function compileProgramWith(
|
||||
gl: WebGL2RenderingContext,
|
||||
vs: string,
|
||||
fs: string
|
||||
): ICompiledProgram | null {
|
||||
const vsShader = compileShader(gl, gl.VERTEX_SHADER, vs);
|
||||
const fsShader = compileShader(gl, gl.FRAGMENT_SHADER, fs);
|
||||
|
||||
if (!vsShader || !fsShader) return null;
|
||||
const program = compileProgram(gl, vsShader, fsShader);
|
||||
if (!program) return null;
|
||||
|
||||
return {
|
||||
program,
|
||||
vertexShader: vsShader,
|
||||
fragmentShader: fsShader
|
||||
};
|
||||
}
|
||||
@@ -1,2 +1,3 @@
|
||||
export * from './glUtils';
|
||||
export * from './keyCodes';
|
||||
export * from './types';
|
||||
Reference in new issue
Block a user