mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2025-01-15 07:21:07 +00:00
256 lines
8.9 KiB
TypeScript
256 lines
8.9 KiB
TypeScript
// this file is used for offline effect building.
|
|
|
|
import { enums } from '../../gfx/enums';
|
|
import rendererEnums from '../../enums';
|
|
import { RenderQueue, PassStage } from '../../core/constants';
|
|
import murmurhash2_32_gc from '../../murmurhash2_gc';
|
|
import * as gfx from './gfx/define';
|
|
import { RenderPassStage, RenderPriority, UniformBinding } from './pipeline/define';
|
|
|
|
enum SamplerInfoIndex {
|
|
minFilter,
|
|
magFilter,
|
|
mipFilter,
|
|
addressU,
|
|
addressV,
|
|
addressW,
|
|
maxAnisotropy,
|
|
cmpFunc,
|
|
minLOD,
|
|
maxLOD,
|
|
mipLODBias,
|
|
borderColor,
|
|
total = borderColor + 4,
|
|
}
|
|
|
|
let typeMap = {};
|
|
typeMap[typeMap['bool'] = gfx.GFXType.BOOL] = 'bool';
|
|
typeMap[typeMap['int'] = gfx.GFXType.INT] = 'int';
|
|
typeMap[typeMap['ivec2'] = gfx.GFXType.INT2] = 'ivec2invTypeParams';
|
|
typeMap[typeMap['ivec3'] = gfx.GFXType.INT3] = 'ivec3';
|
|
typeMap[typeMap['ivec4'] = gfx.GFXType.INT4] = 'ivec4';
|
|
typeMap[typeMap['float'] = gfx.GFXType.FLOAT] = 'float';
|
|
typeMap[typeMap['vec2'] = gfx.GFXType.FLOAT2] = 'vec2';
|
|
typeMap[typeMap['vec3'] = gfx.GFXType.FLOAT3] = 'vec3';
|
|
typeMap[typeMap['vec4'] = gfx.GFXType.FLOAT4] = 'vec4';
|
|
typeMap[typeMap['mat2'] = gfx.GFXType.MAT2] = 'mat2';
|
|
typeMap[typeMap['mat3'] = gfx.GFXType.MAT3] = 'mat3';
|
|
typeMap[typeMap['mat4'] = gfx.GFXType.MAT4] = 'mat4';
|
|
typeMap[typeMap['sampler2D'] = gfx.GFXType.SAMPLER2D] = 'sampler2D';
|
|
typeMap[typeMap['samplerCube'] = gfx.GFXType.SAMPLER_CUBE] = 'samplerCube';
|
|
|
|
const sizeMap = {
|
|
[gfx.GFXType.BOOL]: 4,
|
|
[gfx.GFXType.INT]: 4,
|
|
[gfx.GFXType.INT2]: 8,
|
|
[gfx.GFXType.INT3]: 12,
|
|
[gfx.GFXType.INT4]: 16,
|
|
[gfx.GFXType.FLOAT]: 4,
|
|
[gfx.GFXType.FLOAT2]: 8,
|
|
[gfx.GFXType.FLOAT3]: 12,
|
|
[gfx.GFXType.FLOAT4]: 16,
|
|
[gfx.GFXType.MAT2]: 16,
|
|
[gfx.GFXType.MAT3]: 36,
|
|
[gfx.GFXType.MAT4]: 64,
|
|
[gfx.GFXType.SAMPLER2D]: 4,
|
|
[gfx.GFXType.SAMPLER_CUBE]: 4,
|
|
};
|
|
|
|
const formatMap = {
|
|
[gfx.GFXType.BOOL]: gfx.GFXFormat.R32I,
|
|
[gfx.GFXType.INT]: gfx.GFXFormat.R32I,
|
|
[gfx.GFXType.INT2]: gfx.GFXFormat.RG32I,
|
|
[gfx.GFXType.INT3]: gfx.GFXFormat.RGB32I,
|
|
[gfx.GFXType.INT4]: gfx.GFXFormat.RGBA32I,
|
|
[gfx.GFXType.FLOAT]: gfx.GFXFormat.R32F,
|
|
[gfx.GFXType.FLOAT2]: gfx.GFXFormat.RG32F,
|
|
[gfx.GFXType.FLOAT3]: gfx.GFXFormat.RGB32F,
|
|
[gfx.GFXType.FLOAT4]: gfx.GFXFormat.RGBA32F,
|
|
};
|
|
|
|
// const passParams = {
|
|
// // color mask
|
|
// NONE: gfx.GFXColorMask.NONE,
|
|
// R: gfx.GFXColorMask.R,
|
|
// G: gfx.GFXColorMask.G,
|
|
// B: gfx.GFXColorMask.B,
|
|
// A: gfx.GFXColorMask.A,
|
|
// RG: gfx.GFXColorMask.R | gfx.GFXColorMask.G,
|
|
// RB: gfx.GFXColorMask.R | gfx.GFXColorMask.B,
|
|
// RA: gfx.GFXColorMask.R | gfx.GFXColorMask.A,
|
|
// GB: gfx.GFXColorMask.G | gfx.GFXColorMask.B,
|
|
// GA: gfx.GFXColorMask.G | gfx.GFXColorMask.A,
|
|
// BA: gfx.GFXColorMask.B | gfx.GFXColorMask.A,
|
|
// RGB: gfx.GFXColorMask.R | gfx.GFXColorMask.G | gfx.GFXColorMask.B,
|
|
// RGA: gfx.GFXColorMask.R | gfx.GFXColorMask.G | gfx.GFXColorMask.A,
|
|
// RBA: gfx.GFXColorMask.R | gfx.GFXColorMask.B | gfx.GFXColorMask.A,
|
|
// GBA: gfx.GFXColorMask.G | gfx.GFXColorMask.B | gfx.GFXColorMask.A,
|
|
// ALL: gfx.GFXColorMask.ALL,
|
|
|
|
// // blend operation
|
|
// ADD: gfx.GFXBlendOp.ADD,
|
|
// SUB: gfx.GFXBlendOp.SUB,
|
|
// REV_SUB: gfx.GFXBlendOp.REV_SUB,
|
|
// MIN: gfx.GFXBlendOp.MIN,
|
|
// MAX: gfx.GFXBlendOp.MAX,
|
|
|
|
// // blend factor
|
|
// ZERO: gfx.GFXBlendFactor.ZERO,
|
|
// ONE: gfx.GFXBlendFactor.ONE,
|
|
// SRC_ALPHA: gfx.GFXBlendFactor.SRC_ALPHA,
|
|
// DST_ALPHA: gfx.GFXBlendFactor.DST_ALPHA,
|
|
// ONE_MINUS_SRC_ALPHA: gfx.GFXBlendFactor.ONE_MINUS_SRC_ALPHA,
|
|
// ONE_MINUS_DST_ALPHA: gfx.GFXBlendFactor.ONE_MINUS_DST_ALPHA,
|
|
// SRC_COLOR: gfx.GFXBlendFactor.SRC_COLOR,
|
|
// DST_COLOR: gfx.GFXBlendFactor.DST_COLOR,
|
|
// ONE_MINUS_SRC_COLOR: gfx.GFXBlendFactor.ONE_MINUS_SRC_COLOR,
|
|
// ONE_MINUS_DST_COLOR: gfx.GFXBlendFactor.ONE_MINUS_DST_COLOR,
|
|
// SRC_ALPHA_SATURATE: gfx.GFXBlendFactor.SRC_ALPHA_SATURATE,
|
|
// CONSTANT_COLOR: gfx.GFXBlendFactor.CONSTANT_COLOR,
|
|
// ONE_MINUS_CONSTANT_COLOR: gfx.GFXBlendFactor.ONE_MINUS_CONSTANT_COLOR,
|
|
// CONSTANT_ALPHA: gfx.GFXBlendFactor.CONSTANT_ALPHA,
|
|
// ONE_MINUS_CONSTANT_ALPHA: gfx.GFXBlendFactor.ONE_MINUS_CONSTANT_ALPHA,
|
|
// // stencil operation
|
|
// // ZERO: GFXStencilOp.ZERO, // duplicate, safely removed because enum value is(and always will be) the same
|
|
// KEEP: gfx.GFXStencilOp.KEEP,
|
|
// REPLACE: gfx.GFXStencilOp.REPLACE,
|
|
// INCR: gfx.GFXStencilOp.INCR,
|
|
// DECR: gfx.GFXStencilOp.DECR,
|
|
// INVERT: gfx.GFXStencilOp.INVERT,
|
|
// INCR_WRAP: gfx.GFXStencilOp.INCR_WRAP,
|
|
// DECR_WRAP: gfx.GFXStencilOp.DECR_WRAP,
|
|
// // comparison function
|
|
// NEVER: gfx.GFXComparisonFunc.NEVER,
|
|
// LESS: gfx.GFXComparisonFunc.LESS,
|
|
// EQUAL: gfx.GFXComparisonFunc.EQUAL,
|
|
// LESS_EQUAL: gfx.GFXComparisonFunc.LESS_EQUAL,
|
|
// GREATER: gfx.GFXComparisonFunc.GREATER,
|
|
// NOT_EQUAL: gfx.GFXComparisonFunc.NOT_EQUAL,
|
|
// GREATER_EQUAL: gfx.GFXComparisonFunc.GREATER_EQUAL,
|
|
// ALWAYS: gfx.GFXComparisonFunc.ALWAYS,
|
|
// // cull mode
|
|
// // NONE: GFXCullMode.NONE, // duplicate, safely removed because enum value is(and always will be) the same
|
|
// FRONT: gfx.GFXCullMode.FRONT,
|
|
// BACK: gfx.GFXCullMode.BACK,
|
|
// // shade mode
|
|
// GOURAND: gfx.GFXShadeModel.GOURAND,
|
|
// FLAT: gfx.GFXShadeModel.FLAT,
|
|
// // polygon mode
|
|
// FILL: gfx.GFXPolygonMode.FILL,
|
|
// LINE: gfx.GFXPolygonMode.LINE,
|
|
// POINT: gfx.GFXPolygonMode.POINT,
|
|
// // primitive mode
|
|
// POINT_LIST: gfx.GFXPrimitiveMode.POINT_LIST,
|
|
// LINE_LIST: gfx.GFXPrimitiveMode.LINE_LIST,
|
|
// LINE_STRIP: gfx.GFXPrimitiveMode.LINE_STRIP,
|
|
// LINE_LOOP: gfx.GFXPrimitiveMode.LINE_LOOP,
|
|
// TRIANGLE_LIST: gfx.GFXPrimitiveMode.TRIANGLE_LIST,
|
|
// TRIANGLE_STRIP: gfx.GFXPrimitiveMode.TRIANGLE_STRIP,
|
|
// TRIANGLE_FAN: gfx.GFXPrimitiveMode.TRIANGLE_FAN,
|
|
// LINE_LIST_ADJACENCY: gfx.GFXPrimitiveMode.LINE_LIST_ADJACENCY,
|
|
// LINE_STRIP_ADJACENCY: gfx.GFXPrimitiveMode.LINE_STRIP_ADJACENCY,
|
|
// TRIANGLE_LIST_ADJACENCY: gfx.GFXPrimitiveMode.TRIANGLE_LIST_ADJACENCY,
|
|
// TRIANGLE_STRIP_ADJACENCY: gfx.GFXPrimitiveMode.TRIANGLE_STRIP_ADJACENCY,
|
|
// TRIANGLE_PATCH_ADJACENCY: gfx.GFXPrimitiveMode.TRIANGLE_PATCH_ADJACENCY,
|
|
// QUAD_PATCH_LIST: gfx.GFXPrimitiveMode.QUAD_PATCH_LIST,
|
|
// ISO_LINE_LIST: gfx.GFXPrimitiveMode.ISO_LINE_LIST,
|
|
|
|
// // POINT: gfx.GFXFilter.POINT, // duplicate, safely removed because enum value is(and always will be) the same
|
|
// LINEAR: gfx.GFXFilter.LINEAR,
|
|
// ANISOTROPIC: gfx.GFXFilter.ANISOTROPIC,
|
|
|
|
// WRAP: gfx.GFXAddress.WRAP,
|
|
// MIRROR: gfx.GFXAddress.MIRROR,
|
|
// CLAMP: gfx.GFXAddress.CLAMP,
|
|
// BORDER: gfx.GFXAddress.BORDER,
|
|
|
|
// VIEWPORT: gfx.GFXDynamicState.VIEWPORT,
|
|
// SCISSOR: gfx.GFXDynamicState.SCISSOR,
|
|
// LINE_WIDTH: gfx.GFXDynamicState.LINE_WIDTH,
|
|
// DEPTH_BIAS: gfx.GFXDynamicState.DEPTH_BIAS,
|
|
// BLEND_CONSTANTS: gfx.GFXDynamicState.BLEND_CONSTANTS,
|
|
// DEPTH_BOUNDS: gfx.GFXDynamicState.DEPTH_BOUNDS,
|
|
// STENCIL_WRITE_MASK: gfx.GFXDynamicState.STENCIL_WRITE_MASK,
|
|
// STENCIL_COMPARE_MASK: gfx.GFXDynamicState.STENCIL_COMPARE_MASK,
|
|
|
|
// TRUE: true,
|
|
// FALSE: false
|
|
// };
|
|
|
|
const passParams = {
|
|
BACK: enums.CULL_BACK,
|
|
FRONT: enums.CULL_FRONT,
|
|
NONE: enums.CULL_NONE,
|
|
|
|
ADD: enums.BLEND_FUNC_ADD,
|
|
SUB: enums.BLEND_FUNC_SUBTRACT,
|
|
REV_SUB: enums.BLEND_FUNC_REVERSE_SUBTRACT,
|
|
|
|
ZERO: enums.BLEND_ZERO,
|
|
ONE: enums.BLEND_ONE,
|
|
SRC_COLOR: enums.BLEND_SRC_COLOR,
|
|
ONE_MINUS_SRC_COLOR: enums.BLEND_ONE_MINUS_SRC_COLOR,
|
|
DST_COLOR: enums.BLEND_DST_COLOR,
|
|
ONE_MINUS_DST_COLOR: enums.BLEND_ONE_MINUS_DST_COLOR,
|
|
SRC_ALPHA: enums.BLEND_SRC_ALPHA,
|
|
ONE_MINUS_SRC_ALPHA: enums.BLEND_ONE_MINUS_SRC_ALPHA,
|
|
DST_ALPHA: enums.BLEND_DST_ALPHA,
|
|
ONE_MINUS_DST_ALPHA: enums.BLEND_ONE_MINUS_DST_ALPHA,
|
|
CONSTANT_COLOR: enums.BLEND_CONSTANT_COLOR,
|
|
ONE_MINUS_CONSTANT_COLOR: enums.BLEND_ONE_MINUS_CONSTANT_COLOR,
|
|
CONSTANT_ALPHA: enums.BLEND_CONSTANT_ALPHA,
|
|
ONE_MINUS_CONSTANT_ALPHA: enums.BLEND_ONE_MINUS_CONSTANT_ALPHA,
|
|
SRC_ALPHA_SATURATE: enums.BLEND_SRC_ALPHA_SATURATE,
|
|
|
|
NEVER: enums.DS_FUNC_NEVER,
|
|
LESS: enums.DS_FUNC_LESS,
|
|
EQUAL: enums.DS_FUNC_EQUAL,
|
|
LEQUAL: enums.DS_FUNC_LEQUAL,
|
|
GREATER: enums.DS_FUNC_GREATER,
|
|
NOTEQUAL: enums.DS_FUNC_NOTEQUAL,
|
|
GEQUAL: enums.DS_FUNC_GEQUAL,
|
|
ALWAYS: enums.DS_FUNC_ALWAYS,
|
|
|
|
KEEP: enums.STENCIL_OP_KEEP,
|
|
REPLACE: enums.STENCIL_OP_REPLACE,
|
|
INCR: enums.STENCIL_OP_INCR,
|
|
INCR_WRAP: enums.STENCIL_OP_INCR_WRAP,
|
|
DECR: enums.STENCIL_OP_DECR,
|
|
DECR_WRAP: enums.STENCIL_OP_DECR_WRAP,
|
|
INVERT: enums.STENCIL_OP_INVERT
|
|
};
|
|
Object.assign(passParams, RenderPassStage);
|
|
|
|
// for structural type checking
|
|
// an 'any' key will check against all elements defined in that object
|
|
// a key start with '$' means its essential, and can't be undefined
|
|
const effectStructure = {
|
|
$techniques: [
|
|
{
|
|
$passes: [
|
|
{
|
|
depthStencilState: {},
|
|
rasterizerState: {},
|
|
blendState: { targets: [{}] },
|
|
properties: { any: { sampler: {}, inspector: {} } }
|
|
}
|
|
]
|
|
}
|
|
]
|
|
};
|
|
|
|
let mappings = {
|
|
murmurhash2_32_gc,
|
|
SamplerInfoIndex,
|
|
effectStructure,
|
|
typeMap,
|
|
sizeMap,
|
|
formatMap,
|
|
passParams,
|
|
RenderQueue,
|
|
RenderPriority,
|
|
GFXGetTypeSize: gfx.GFXGetTypeSize,
|
|
UniformBinding
|
|
};
|
|
|
|
export default mappings; |