Compare commits

..

1 Commits

Author SHA1 Message Date
AncTe
fead02b9f3
Merge 91c7ee455c into 820dc5bf4c 2025-11-01 10:15:34 +00:00
4 changed files with 29 additions and 56 deletions

View File

@ -1,6 +1,3 @@
{
"name": "@motajs/render-assets",
"dependencies": {
"@motajs/client-base": "workspace:*"
}
"name": "@motajs/render-assets"
}

View File

@ -14,9 +14,9 @@ import {
} from './types';
import vert from './shader/pack.vert?raw';
import frag from './shader/pack.frag?raw';
import { compileGLWith } from './utils';
import { logger } from '@motajs/common';
import { isNil } from 'lodash-es';
import { compileProgramWith } from 'packages/client-base/src/glUtils';
interface IndexMarkedComposedData {
/** 组合数据 */
@ -229,7 +229,7 @@ export class TextureMaxRectsWebGL2Composer
this.canvas.width = maxWidth;
this.canvas.height = maxHeight;
this.gl = this.canvas.getContext('webgl2')!;
const program = compileProgramWith(this.gl, vert, frag)!;
const program = compileGLWith(this.gl, vert, frag)!;
this.program = program;
// 初始化画布数据

View File

@ -5,3 +5,4 @@ export * from './store';
export * from './streamComposer';
export * from './texture';
export * from './types';
export * from './utils';

View File

@ -1,45 +1,18 @@
import { logger } from '@motajs/common';
/**
*
* @param gl WebGL2
* @param type
* @param source
*/
export function compileShader(
export function compileGLWith(
gl: WebGL2RenderingContext,
type: number,
source: string
): WebGLShader | null {
const shader = gl.createShader(type);
if (!shader) return null;
gl.shaderSource(shader, source);
gl.compileShader(shader);
vert: string,
frag: string
): WebGLProgram | null {
const vsShader = compileShader(gl, gl.VERTEX_SHADER, vert);
const fsShader = compileShader(gl, gl.FRAGMENT_SHADER, frag);
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;
}
if (!vsShader || !fsShader) 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.attachShader(program, vsShader);
gl.attachShader(program, fsShader);
gl.linkProgram(program);
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
@ -51,21 +24,23 @@ export function compileProgram(
return program;
}
/**
* 使
* @param gl WebGL2
* @param vs
* @param fs
*/
export function compileProgramWith(
function compileShader(
gl: WebGL2RenderingContext,
vs: string,
fs: string
): WebGLProgram | null {
const vsShader = compileShader(gl, gl.VERTEX_SHADER, vs);
const fsShader = compileShader(gl, gl.FRAGMENT_SHADER, fs);
type: number,
source: string
): WebGLShader | null {
const shader = gl.createShader(type);
if (!shader) return null;
gl.shaderSource(shader, source);
gl.compileShader(shader);
if (!vsShader || !fsShader) return null;
return compileProgram(gl, vsShader, fsShader);
// 如果编译失败
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;
}