mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2026-01-09 20:46:53 +00:00
补充某些必要的文件
This commit is contained in:
119186
engine/bin/cocos2d-js-for-preview.js
Normal file
119186
engine/bin/cocos2d-js-for-preview.js
Normal file
File diff suppressed because it is too large
Load Diff
1
engine/bin/cocos2d-js-for-preview.js.map
Normal file
1
engine/bin/cocos2d-js-for-preview.js.map
Normal file
File diff suppressed because one or more lines are too long
97657
engine/bin/cocos2d-jsb-for-preview.js
Normal file
97657
engine/bin/cocos2d-jsb-for-preview.js
Normal file
File diff suppressed because it is too large
Load Diff
59
engine/cocos2d/renderer/build/build-mapping.js
Normal file
59
engine/cocos2d/renderer/build/build-mapping.js
Normal file
@@ -0,0 +1,59 @@
|
||||
'use strict';
|
||||
|
||||
const Path = require('path');
|
||||
const resolve = require('rollup-plugin-node-resolve');
|
||||
const rollup = require('rollup');
|
||||
const typescript = require('rollup-plugin-typescript');
|
||||
|
||||
let src = Path.join(__dirname, './mappings/offline-mappings.ts');
|
||||
let dest = Path.join(__dirname, './mappings');
|
||||
let name = 'index';
|
||||
let sourcemap = false;
|
||||
let globals = {};
|
||||
|
||||
console.log('rollup mappings...');
|
||||
|
||||
// see below for details on the options
|
||||
const inputOptions = {
|
||||
input: src,
|
||||
plugins: [
|
||||
typescript({lib: ["es5", "es6", "dom"], target: "es5"}),
|
||||
resolve({
|
||||
jsnext: false,
|
||||
main: false,
|
||||
root: process.cwd()
|
||||
}),
|
||||
],
|
||||
};
|
||||
const outputOptions = {
|
||||
file: Path.join(dest, name+'.js'),
|
||||
format: 'cjs',
|
||||
name,
|
||||
globals,
|
||||
sourcemap,
|
||||
};
|
||||
|
||||
async function build() {
|
||||
// create a bundle
|
||||
let bundle;
|
||||
|
||||
try {
|
||||
bundle = await rollup.rollup(inputOptions);
|
||||
}
|
||||
catch (err) {
|
||||
console.error(err);
|
||||
return;
|
||||
}
|
||||
|
||||
// console.log(bundle.imports); // an array of external dependencies
|
||||
// console.log(bundle.exports); // an array of names exported by the entry point
|
||||
// console.log(bundle.modules); // an array of module objects
|
||||
|
||||
// generate code and a sourcemap
|
||||
const { code, map } = await bundle.generate(outputOptions);
|
||||
|
||||
// or write the bundle to disk
|
||||
await bundle.write(outputOptions);
|
||||
}
|
||||
|
||||
build();
|
||||
20
engine/cocos2d/renderer/build/chunks/alpha-test.inc
Normal file
20
engine/cocos2d/renderer/build/chunks/alpha-test.inc
Normal file
@@ -0,0 +1,20 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
#if USE_ALPHA_TEST
|
||||
|
||||
uniform ALPHA_TEST {
|
||||
float alphaThreshold;
|
||||
};
|
||||
#endif
|
||||
|
||||
void ALPHA_TEST (in vec4 color) {
|
||||
#if USE_ALPHA_TEST
|
||||
if (color.a < alphaThreshold) discard;
|
||||
#endif
|
||||
}
|
||||
|
||||
void ALPHA_TEST (in float alpha) {
|
||||
#if USE_ALPHA_TEST
|
||||
if (alpha < alphaThreshold) discard;
|
||||
#endif
|
||||
}
|
||||
23
engine/cocos2d/renderer/build/chunks/cc-global.inc
Normal file
23
engine/cocos2d/renderer/build/chunks/cc-global.inc
Normal file
@@ -0,0 +1,23 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
// have to specify precisions explicitly
|
||||
// if shared among stages with different precisions
|
||||
#pragma builtin(global)
|
||||
uniform CCGlobal {
|
||||
mat4 cc_matView; // view matrix
|
||||
mat4 cc_matViewInv; // inverse view matrix
|
||||
mat4 cc_matProj; // projection matrix
|
||||
mat4 cc_matProjInv; // inverse projection matrix
|
||||
mat4 cc_matViewProj; // view-projection matrix
|
||||
mat4 cc_matViewProjInv; // inverse view-projection matrix
|
||||
vec4 cc_cameraPos; // xyz: camera position
|
||||
vec4 cc_time; // x: global time since started in seconds, y: delta time for current frame, z: total frames since started
|
||||
mediump vec4 cc_screenSize; // xy: screen size, zw: inverse screen size
|
||||
mediump vec4 cc_screenScale; // xy: screen scale, zw: inverse screen scale
|
||||
// mediump vec4 cc_nativeSize; // xy: shading size, zw: inverse shading size
|
||||
// mediump vec4 cc_exposure; // x: exposure, y: inverse exposure, z: HDR flag, w: exposure scale
|
||||
// mediump vec4 cc_mainLitDir; // xyz: main direcitonal light direction
|
||||
// mediump vec4 cc_mainLitColor; // xyz: main direcitonal light color, w: intensity
|
||||
// mediump vec4 cc_ambientSky; //xyz: sky illumination color, w: intensity
|
||||
// mediump vec4 cc_ambientGround; // xyz: ground albedo color, w: envmap LOD
|
||||
};
|
||||
110
engine/cocos2d/renderer/build/chunks/cc-lights.inc
Normal file
110
engine/cocos2d/renderer/build/chunks/cc-lights.inc
Normal file
@@ -0,0 +1,110 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
|
||||
// TODO: lights uniform should move back to cc-global
|
||||
|
||||
#include <shadow>
|
||||
|
||||
#define CC_MAX_LIGHTS 4
|
||||
|
||||
#if CC_NUM_LIGHTS > 0
|
||||
|
||||
// directional lights
|
||||
#pragma builtin(global)
|
||||
uniform CCLIGHTS {
|
||||
vec4 cc_lightPositionAndRange[CC_MAX_LIGHTS]; // xyz range
|
||||
vec4 cc_lightDirection[CC_MAX_LIGHTS]; // xyz spotAngle
|
||||
vec4 cc_lightColor[CC_MAX_LIGHTS]; // xyz spotExp
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
struct LightInfo {
|
||||
vec3 lightDir;
|
||||
vec3 radiance;
|
||||
vec4 lightColor;
|
||||
};
|
||||
|
||||
// directional light
|
||||
LightInfo computeDirectionalLighting(
|
||||
vec4 lightDirection,
|
||||
vec4 lightColor
|
||||
) {
|
||||
LightInfo ret;
|
||||
ret.lightDir = -normalize(lightDirection.xyz);
|
||||
ret.radiance = lightColor.rgb;
|
||||
ret.lightColor = lightColor;
|
||||
return ret;
|
||||
}
|
||||
|
||||
// point light
|
||||
LightInfo computePointLighting(
|
||||
vec3 worldPosition,
|
||||
vec4 lightPositionAndRange,
|
||||
vec4 lightColor
|
||||
) {
|
||||
LightInfo ret;
|
||||
vec3 lightDir = lightPositionAndRange.xyz - worldPosition;
|
||||
float attenuation = max(0., 1.0 - length(lightDir) / lightPositionAndRange.w);
|
||||
|
||||
ret.lightDir = normalize(lightDir);
|
||||
ret.radiance = lightColor.rgb * attenuation;
|
||||
ret.lightColor = lightColor;
|
||||
return ret;
|
||||
}
|
||||
|
||||
// spot light
|
||||
LightInfo computeSpotLighting(
|
||||
vec3 worldPosition,
|
||||
vec4 lightPositionAndRange,
|
||||
vec4 lightDirection,
|
||||
vec4 lightColor
|
||||
) {
|
||||
LightInfo ret;
|
||||
vec3 lightDir = lightPositionAndRange.xyz - worldPosition;
|
||||
float attenuation = max(0., 1.0 - length(lightDir) / lightPositionAndRange.w);
|
||||
lightDir = normalize(lightDir);
|
||||
float cosConeAngle = max(0., dot(lightDirection.xyz, -lightDir));
|
||||
cosConeAngle = cosConeAngle < lightDirection.w ? 0. : cosConeAngle;
|
||||
cosConeAngle = pow(cosConeAngle, lightColor.w);
|
||||
|
||||
ret.lightDir = lightDir;
|
||||
ret.radiance = lightColor.rgb * attenuation * cosConeAngle;
|
||||
ret.lightColor = lightColor;
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct Lighting {
|
||||
vec3 diffuse;
|
||||
vec3 specular;
|
||||
};
|
||||
|
||||
#define CC_CALC_LIGHT(index, surface, result, lightFunc, ambientFunc) \
|
||||
#if CC_NUM_LIGHTS > index \
|
||||
#if CC_LIGHT_##index##_TYPE == 3 \
|
||||
result.diffuse += ambientFunc(s, cc_lightColor[index]); \
|
||||
#else \
|
||||
LightInfo info##index; \
|
||||
#if CC_LIGHT_##index##_TYPE == 0 \
|
||||
info##index = computeDirectionalLighting(cc_lightDirection[index], cc_lightColor[index]); \
|
||||
#elif CC_LIGHT_##index##_TYPE == 1 \
|
||||
info##index = computePointLighting(s.position, cc_lightPositionAndRange[index], cc_lightColor[index]); \
|
||||
#elif CC_LIGHT_##index##_TYPE == 2 \
|
||||
info##index = computeSpotLighting(s.position, cc_lightPositionAndRange[index], cc_lightDirection[index], cc_lightColor[index]); \
|
||||
#endif \
|
||||
\
|
||||
Lighting result##index = lightFunc(surface, info##index); \
|
||||
CC_CALC_SHADOW(index, result##index) \
|
||||
result.diffuse += result##index.diffuse; \
|
||||
result.specular += result##index.specular; \
|
||||
#endif \
|
||||
#endif
|
||||
|
||||
#define CC_CALC_LIGHTS(surface, result, lightFunc, ambientFunc) \
|
||||
result.diffuse = vec3(0, 0, 0); \
|
||||
result.specular = vec3(0, 0, 0); \
|
||||
\
|
||||
CC_CALC_LIGHT(0, surface, result, lightFunc, ambientFunc) \
|
||||
CC_CALC_LIGHT(1, surface, result, lightFunc, ambientFunc) \
|
||||
CC_CALC_LIGHT(2, surface, result, lightFunc, ambientFunc) \
|
||||
CC_CALC_LIGHT(3, surface, result, lightFunc, ambientFunc)
|
||||
7
engine/cocos2d/renderer/build/chunks/cc-local.inc
Normal file
7
engine/cocos2d/renderer/build/chunks/cc-local.inc
Normal file
@@ -0,0 +1,7 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
#pragma builtin(local)
|
||||
uniform CCLocal {
|
||||
mat4 cc_matWorld;
|
||||
mat4 cc_matWorldIT;
|
||||
};
|
||||
12
engine/cocos2d/renderer/build/chunks/common.inc
Normal file
12
engine/cocos2d/renderer/build/chunks/common.inc
Normal file
@@ -0,0 +1,12 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
// common module
|
||||
|
||||
// constant value
|
||||
#define PI 3.14159265359
|
||||
#define PI2 6.28318530718
|
||||
#define EPSILON 1e-6
|
||||
#define LOG2 1.442695
|
||||
|
||||
// common function
|
||||
#define saturate(a) clamp( a, 0.0, 1.0 )
|
||||
7
engine/cocos2d/renderer/build/chunks/gamma.inc
Normal file
7
engine/cocos2d/renderer/build/chunks/gamma.inc
Normal file
@@ -0,0 +1,7 @@
|
||||
// Copyright (c) 2017-2019 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
// #define SRGBToLinear(gamma) pow(gamma, vec3(2.2))
|
||||
#define SRGBToLinear(gamma) (gamma * gamma)
|
||||
|
||||
// #define LinearToSRGB(linear) pow(linear, vec3(0.454545))
|
||||
#define LinearToSRGB(linear) sqrt(linear)
|
||||
76
engine/cocos2d/renderer/build/chunks/input-standard.inc
Normal file
76
engine/cocos2d/renderer/build/chunks/input-standard.inc
Normal file
@@ -0,0 +1,76 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
#include <skinning>
|
||||
|
||||
struct StandardVertInput {
|
||||
vec2 uv;
|
||||
vec4 position;
|
||||
vec3 normal;
|
||||
vec4 tangent;
|
||||
vec4 color;
|
||||
};
|
||||
|
||||
in vec3 a_position;
|
||||
|
||||
#if CC_USE_ATTRIBUTE_UV0
|
||||
in vec2 a_uv0;
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_COLOR
|
||||
in vec4 a_color;
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_NORMAL
|
||||
in vec3 a_normal;
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_TANGENT
|
||||
in vec4 a_tangent;
|
||||
#endif
|
||||
|
||||
void CCAttribute (out StandardVertInput In) {
|
||||
In.position = vec4(a_position, 1.0);
|
||||
|
||||
#if CC_USE_ATTRIBUTE_UV0
|
||||
In.uv = a_uv0;
|
||||
#else
|
||||
In.uv = vec2(0.0);
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_COLOR
|
||||
In.color = a_color;
|
||||
#else
|
||||
In.color = vec4(1.0);
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_NORMAL
|
||||
In.normal = a_normal;
|
||||
#else
|
||||
In.normal = vec3(0.0, 1.0, 0.0);
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_TANGENT
|
||||
In.tangent = a_tangent;
|
||||
#else
|
||||
In.tangent = vec4(1.0, 0.0, 0.0, 0.0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void CCVertInput(out StandardVertInput In) {
|
||||
CCAttribute(In);
|
||||
|
||||
#if CC_USE_SKINNING
|
||||
mat4 m = skinMatrix();
|
||||
|
||||
In.position = m * In.position;
|
||||
|
||||
#if CC_USE_ATTRIBUTE_NORMAL
|
||||
In.normal = (m * vec4(In.normal, 0)).xyz;
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_TANGENT
|
||||
In.tangent = m * In.tangent;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
9
engine/cocos2d/renderer/build/chunks/output.inc
Normal file
9
engine/cocos2d/renderer/build/chunks/output.inc
Normal file
@@ -0,0 +1,9 @@
|
||||
// Copyright (c) 2017-2019 Xiamen Yaji Software Co., Ltd.
|
||||
#include <gamma>
|
||||
|
||||
vec4 CCFragOutput (vec4 color) {
|
||||
#if OUTPUT_TO_GAMMA
|
||||
color.rgb = LinearToSRGB(color.rgb);
|
||||
#endif
|
||||
return color;
|
||||
}
|
||||
12
engine/cocos2d/renderer/build/chunks/packing.inc
Normal file
12
engine/cocos2d/renderer/build/chunks/packing.inc
Normal file
@@ -0,0 +1,12 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
vec4 packDepthToRGBA(float depth) {
|
||||
vec4 ret = vec4(1.0, 255.0, 65025.0, 160581375.0) * depth;
|
||||
ret = fract(ret);
|
||||
ret -= ret.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
float unpackRGBAToDepth(vec4 color) {
|
||||
return dot(color, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 160581375.0));
|
||||
}
|
||||
175
engine/cocos2d/renderer/build/chunks/rect-area-light.inc
Normal file
175
engine/cocos2d/renderer/build/chunks/rect-area-light.inc
Normal file
@@ -0,0 +1,175 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
mat3 transpose(mat3 v) {
|
||||
mat3 tmp;
|
||||
tmp[0] = vec3(v[0].x, v[1].x, v[2].x);
|
||||
tmp[1] = vec3(v[0].y, v[1].y, v[2].y);
|
||||
tmp[2] = vec3(v[0].z, v[1].z, v[2].z);
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void ClipQuadToHorizon(inout vec3 L[5], out int n) {
|
||||
// detect clipping config
|
||||
int config = 0;
|
||||
if (L[0].z > 0.0) config += 1;
|
||||
if (L[1].z > 0.0) config += 2;
|
||||
if (L[2].z > 0.0) config += 4;
|
||||
if (L[3].z > 0.0) config += 8;
|
||||
config = 15;
|
||||
|
||||
// clip
|
||||
n = 0;
|
||||
|
||||
if (config == 0)
|
||||
{
|
||||
// clip all
|
||||
}
|
||||
else if (config == 1) // V1 clip V2 V3 V4
|
||||
{
|
||||
n = 3;
|
||||
L[1] = -L[1].z * L[0] + L[0].z * L[1];
|
||||
L[2] = -L[3].z * L[0] + L[0].z * L[3];
|
||||
}
|
||||
else if (config == 2) // V2 clip V1 V3 V4
|
||||
{
|
||||
n = 3;
|
||||
L[0] = -L[0].z * L[1] + L[1].z * L[0];
|
||||
L[2] = -L[2].z * L[1] + L[1].z * L[2];
|
||||
}
|
||||
else if (config == 3) // V1 V2 clip V3 V4
|
||||
{
|
||||
n = 4;
|
||||
L[2] = -L[2].z * L[1] + L[1].z * L[2];
|
||||
L[3] = -L[3].z * L[0] + L[0].z * L[3];
|
||||
}
|
||||
else if (config == 4) // V3 clip V1 V2 V4
|
||||
{
|
||||
n = 3;
|
||||
L[0] = -L[3].z * L[2] + L[2].z * L[3];
|
||||
L[1] = -L[1].z * L[2] + L[2].z * L[1];
|
||||
}
|
||||
else if (config == 5) // V1 V3 clip V2 V4) impossible
|
||||
{
|
||||
n = 0;
|
||||
}
|
||||
else if (config == 6) // V2 V3 clip V1 V4
|
||||
{
|
||||
n = 4;
|
||||
L[0] = -L[0].z * L[1] + L[1].z * L[0];
|
||||
L[3] = -L[3].z * L[2] + L[2].z * L[3];
|
||||
}
|
||||
else if (config == 7) // V1 V2 V3 clip V4
|
||||
{
|
||||
n = 5;
|
||||
L[4] = -L[3].z * L[0] + L[0].z * L[3];
|
||||
L[3] = -L[3].z * L[2] + L[2].z * L[3];
|
||||
}
|
||||
else if (config == 8) // V4 clip V1 V2 V3
|
||||
{
|
||||
n = 3;
|
||||
L[0] = -L[0].z * L[3] + L[3].z * L[0];
|
||||
L[1] = -L[2].z * L[3] + L[3].z * L[2];
|
||||
L[2] = L[3];
|
||||
}
|
||||
else if (config == 9) // V1 V4 clip V2 V3
|
||||
{
|
||||
n = 4;
|
||||
L[1] = -L[1].z * L[0] + L[0].z * L[1];
|
||||
L[2] = -L[2].z * L[3] + L[3].z * L[2];
|
||||
}
|
||||
else if (config == 10) // V2 V4 clip V1 V3) impossible
|
||||
{
|
||||
n = 0;
|
||||
}
|
||||
else if (config == 11) // V1 V2 V4 clip V3
|
||||
{
|
||||
n = 5;
|
||||
L[4] = L[3];
|
||||
L[3] = -L[2].z * L[3] + L[3].z * L[2];
|
||||
L[2] = -L[2].z * L[1] + L[1].z * L[2];
|
||||
}
|
||||
else if (config == 12) // V3 V4 clip V1 V2
|
||||
{
|
||||
n = 4;
|
||||
L[1] = -L[1].z * L[2] + L[2].z * L[1];
|
||||
L[0] = -L[0].z * L[3] + L[3].z * L[0];
|
||||
}
|
||||
else if (config == 13) // V1 V3 V4 clip V2
|
||||
{
|
||||
n = 5;
|
||||
L[4] = L[3];
|
||||
L[3] = L[2];
|
||||
L[2] = -L[1].z * L[2] + L[2].z * L[1];
|
||||
L[1] = -L[1].z * L[0] + L[0].z * L[1];
|
||||
}
|
||||
else if (config == 14) // V2 V3 V4 clip V1
|
||||
{
|
||||
n = 5;
|
||||
L[4] = -L[0].z * L[3] + L[3].z * L[0];
|
||||
L[0] = -L[0].z * L[1] + L[1].z * L[0];
|
||||
}
|
||||
else if (config == 15) // V1 V2 V3 V4
|
||||
{
|
||||
n = 4;
|
||||
}
|
||||
|
||||
if (n == 3)
|
||||
L[3] = L[0];
|
||||
if (n == 4)
|
||||
L[4] = L[0];
|
||||
}
|
||||
|
||||
// https://eheitzresearch.wordpress.com/415-2/
|
||||
float IntegrateEdge(vec3 v1, vec3 v2) {
|
||||
float cosTheta = dot(v1, v2);
|
||||
float theta = acos(cosTheta);
|
||||
return cross(v1, v2).z * ((theta > 0.001) ? theta/sin(theta) : 4.0);
|
||||
}
|
||||
|
||||
vec3 LTC_Evaluate(vec3 N, vec3 V, vec3 P, mat3 Minv, vec3 points[4]) {
|
||||
// construct orthonormal basis around N
|
||||
vec3 T1, T2;
|
||||
T1 = normalize(V - N*dot(V, N));
|
||||
T2 = cross(N, T1);
|
||||
|
||||
// rotate area light in (T1, T2, N) basis
|
||||
Minv = Minv * transpose(mat3(T1, T2, N));
|
||||
|
||||
// polygon (allocate 5 vertices for clipping)
|
||||
vec3 L[5];
|
||||
L[0] = Minv * (points[0] - P);
|
||||
L[1] = Minv * (points[1] - P);
|
||||
L[2] = Minv * (points[2] - P);
|
||||
L[3] = Minv * (points[3] - P);
|
||||
|
||||
int n;
|
||||
ClipQuadToHorizon(L, n);
|
||||
|
||||
if (n == 0)
|
||||
return vec3(0, 0, 0);
|
||||
|
||||
// project onto sphere
|
||||
L[0] = normalize(L[0]);
|
||||
L[1] = normalize(L[1]);
|
||||
L[2] = normalize(L[2]);
|
||||
L[3] = normalize(L[3]);
|
||||
L[4] = normalize(L[4]);
|
||||
|
||||
// integrate
|
||||
float sum = 0.0;
|
||||
|
||||
sum += IntegrateEdge(L[0], L[1]);
|
||||
sum += IntegrateEdge(L[1], L[2]);
|
||||
sum += IntegrateEdge(L[2], L[3]);
|
||||
if (n >= 4)
|
||||
sum += IntegrateEdge(L[3], L[4]);
|
||||
if (n == 5)
|
||||
sum += IntegrateEdge(L[4], L[0]);
|
||||
|
||||
sum = max(0.0, sum);
|
||||
|
||||
vec3 Lo_i = vec3(sum, sum, sum);
|
||||
|
||||
return Lo_i;
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
|
||||
uniform Constants{
|
||||
vec4 mainTiling_Offset;
|
||||
vec4 frameTile_velLenScale;
|
||||
vec4 scale;
|
||||
};
|
||||
|
||||
#include <cc-global>
|
||||
#include <cc-local>
|
||||
#include <transform>
|
||||
|
||||
out vec2 uv;
|
||||
out vec4 color;
|
||||
|
||||
void computeVertPos(inout vec4 pos, vec2 vertOffset, vec4 q, vec3 s
|
||||
#if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD
|
||||
, mat4 viewInv
|
||||
#endif
|
||||
#if CC_USE_STRETCHED_BILLBOARD
|
||||
, vec3 eye
|
||||
, vec4 velocity
|
||||
, float velocityScale
|
||||
, float lengthScale
|
||||
, float xIndex
|
||||
#endif
|
||||
) {
|
||||
#if CC_USE_BILLBOARD
|
||||
vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);
|
||||
vec3 camX = normalize(vec3(viewInv[0][0], viewInv[1][0], viewInv[2][0]));
|
||||
vec3 camY = normalize(vec3(viewInv[0][1], viewInv[1][1], viewInv[2][1]));
|
||||
vec3 camZ = normalize(vec3(viewInv[0][2], viewInv[1][2], viewInv[2][2]));
|
||||
pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, camZ, q);
|
||||
#elif CC_USE_STRETCHED_BILLBOARD
|
||||
vec3 camRight = normalize(cross(pos.xyz - eye, velocity.xyz)) * s.x;
|
||||
vec3 camUp = velocity.xyz * velocityScale + normalize(velocity.xyz) * lengthScale * s.y;
|
||||
pos.xyz += (camRight * abs(vertOffset.x) * sign(vertOffset.y)) - camUp * xIndex;
|
||||
#elif CC_USE_HORIZONTAL_BILLBOARD
|
||||
vec3 viewSpaceVert = vec3(vertOffset.x * s.x, vertOffset.y * s.y, 0.);
|
||||
vec3 camX = vec3(1, 0, 0);
|
||||
vec3 camY = vec3(0, 0, -1);
|
||||
pos.xyz += rotateInLocalSpace(viewSpaceVert, camX, camY, cross(camX, camY), q);
|
||||
#elif CC_USE_VERTICAL_BILLBOARD
|
||||
vec2 viewSpaceVert = vec2(vertOffset.x * s.x, vertOffset.y * s.y);
|
||||
rotateCorner(viewSpaceVert, q.z);
|
||||
vec3 camX = normalize(vec3(cc_matView[0][0], cc_matView[1][0], cc_matView[2][0]));
|
||||
vec3 camY = vec3(0, 1, 0);
|
||||
vec3 offset = camX * viewSpaceVert.x + camY * viewSpaceVert.y;
|
||||
pos.xyz += offset;
|
||||
#else
|
||||
pos.x += vertOffset.x;
|
||||
pos.y += vertOffset.y;
|
||||
#endif
|
||||
}
|
||||
|
||||
vec2 computeUV(float frameIndex, vec2 vertIndex, vec2 frameTile){
|
||||
vec2 aniUV = vec2(0, floor(frameIndex * frameTile.y));
|
||||
aniUV.x = floor(frameIndex * frameTile.x * frameTile.y - aniUV.y * frameTile.x);
|
||||
#if !CC_USE_MESH
|
||||
vertIndex.y = 1. - vertIndex.y; // if using billboard ,y must be flipped.but mesh does not,why?
|
||||
#endif
|
||||
return (aniUV.xy + vertIndex) / vec2(frameTile.x, frameTile.y);
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
|
||||
precision mediump float;
|
||||
#include <particle-common>
|
||||
in vec3 a_position; // center position
|
||||
in vec4 a_texCoord; // x:index y:size zw:texcoord
|
||||
in vec3 a_texCoord1; // xyz:velocity
|
||||
in vec3 a_texCoord2;
|
||||
in vec4 a_color;
|
||||
|
||||
#if CC_DRAW_WIRE_FRAME
|
||||
out vec3 vBarycentric;
|
||||
#endif
|
||||
|
||||
vec4 vs_main() {
|
||||
highp vec4 pos = vec4(a_position, 1);
|
||||
vec4 velocity = vec4(a_texCoord1.xyz, 0);
|
||||
|
||||
#if !CC_USE_WORLD_SPACE
|
||||
pos = cc_matWorld * pos;
|
||||
velocity = cc_matWorld * velocity;
|
||||
#endif
|
||||
|
||||
float vertOffset = (a_texCoord.x - 0.5) * a_texCoord.y;
|
||||
vec3 camUp = normalize(cross(pos.xyz - cc_cameraPos.xyz, velocity.xyz));
|
||||
pos.xyz += camUp * vertOffset;
|
||||
pos = cc_matViewProj * pos;
|
||||
uv = a_texCoord.zw * mainTiling_Offset.xy + mainTiling_Offset.zw;;
|
||||
color = a_color;
|
||||
#if CC_DRAW_WIRE_FRAME
|
||||
vBarycentric = a_texCoord2;
|
||||
#endif
|
||||
return pos;
|
||||
}
|
||||
395
engine/cocos2d/renderer/build/chunks/shader/particle-vs-gpu.inc
Normal file
395
engine/cocos2d/renderer/build/chunks/shader/particle-vs-gpu.inc
Normal file
@@ -0,0 +1,395 @@
|
||||
|
||||
precision mediump float;
|
||||
#include <particle-common>
|
||||
#define MAX_KEY_NUM 8
|
||||
#define CURVE_MODE_CONSTANT 0
|
||||
#define CURVE_MODE_RANDOM_CONSTANT 1
|
||||
#define CURVE_MODE_CURVE 2
|
||||
#define CURVE_MODE_RANDOM_CURVE 3
|
||||
|
||||
#define GRADIENT_MODE_FIX 0
|
||||
#define GRADIENT_MODE_BLEND 1
|
||||
|
||||
#define GRADIENT_RANGE_MODE_COLOR 0
|
||||
#define GRADIENT_RANGE_MODE_TWO_COLOR 1
|
||||
#define GRADIENT_RANGE_MODE_RANDOM_COLOR 2
|
||||
#define GRADIENT_RANGE_MODE_GRADIENT 3
|
||||
#define GRADIENT_RANGE_MODE_TWO_GRADIENT 4
|
||||
|
||||
#define SIMULATE_SPACE_LOCAL 0
|
||||
#define SIMULATE_SPACE_WORLD 1
|
||||
|
||||
#define ANIMATION_MODE_WHOLE_SHEET 0
|
||||
#define ANIMATION_MODE_SINGLE_ROW 1
|
||||
|
||||
#define COLOR_OVERTIME_RAND_OFFSET 91041.
|
||||
#define FORCE_OVERTIME_RAND_OFFSET 212165.
|
||||
#define ROTATION_OVERTIME_RAND_OFFSET 125292.
|
||||
#define SIZE_OVERTIME_RAND_OFFSET 39825.
|
||||
#define TEXTURE_ANIMATION_RAND_OFFSET 90794.
|
||||
#define VELOCITY_OVERTIME_RAND_OFFSET 197866.
|
||||
|
||||
#define DECL_CURVE_STRUCT(name) \
|
||||
uniform CurveStruct_##name## { \
|
||||
int u_##name##_curveMode; \
|
||||
float u_##name##_minConstant; \
|
||||
float u_##name##_maxConstant; \
|
||||
float u_##name##_minKeyTime[MAX_KEY_NUM]; \
|
||||
vec4 u_##name##_minKeyCoef[MAX_KEY_NUM]; \
|
||||
vec4 u_##name##_maxKeyCoef[MAX_KEY_NUM]; \
|
||||
float u_##name##_maxKeyTime[MAX_KEY_NUM]; \
|
||||
};
|
||||
|
||||
#define DECL_CURVE_STRUCT_INT(name) \
|
||||
uniform CurveStructInt_##name## { \
|
||||
int u_##name##_curveMode; \
|
||||
float u_##name##_minConstant; \
|
||||
float u_##name##_maxConstant; \
|
||||
float u_##name##_minKeyTime[MAX_KEY_NUM]; \
|
||||
vec4 u_##name##_minKeyCoef[MAX_KEY_NUM]; \
|
||||
vec4 u_##name##_maxKeyCoef[MAX_KEY_NUM]; \
|
||||
float u_##name##_maxKeyTime[MAX_KEY_NUM]; \
|
||||
float u_##name##_minIntegral[MAX_KEY_NUM - 1]; \
|
||||
float u_##name##_maxIntegral[MAX_KEY_NUM - 1]; \
|
||||
};
|
||||
|
||||
#define DECL_GRADIENT_STRUCT(name) \
|
||||
uniform GradientStruct_##name## { \
|
||||
int u_##name##_rangeMode; \
|
||||
int u_##name##_minGradMode; \
|
||||
int u_##name##_maxGradMode; \
|
||||
vec4 u_##name##_minColor; \
|
||||
vec4 u_##name##_maxColor; \
|
||||
vec3 u_##name##_minColorKeyValue[MAX_KEY_NUM]; \
|
||||
float u_##name##_minColorKeyTime[MAX_KEY_NUM]; \
|
||||
float u_##name##_minAlphaKeyValue[MAX_KEY_NUM]; \
|
||||
float u_##name##_minAlphaKeyTime[MAX_KEY_NUM]; \
|
||||
vec3 u_##name##_maxColorKeyValue[MAX_KEY_NUM]; \
|
||||
float u_##name##_maxColorKeyTime[MAX_KEY_NUM]; \
|
||||
float u_##name##_maxAlphaKeyValue[MAX_KEY_NUM]; \
|
||||
float u_##name##_maxAlphaKeyTime[MAX_KEY_NUM]; \
|
||||
};
|
||||
|
||||
#define EVAL_CURVE_RANGE(name, t, rnd) \
|
||||
evaluateCurveRange(u_##name##_curveMode, u_##name##_minConstant, u_##name##_maxConstant, u_##name##_minKeyTime, u_##name##_minKeyCoef, u_##name##_maxKeyTime, u_##name##_maxKeyCoef, t, rnd)
|
||||
|
||||
#define EVAL_CURVE_INTEGRAL(name, t, ts, rnd) \
|
||||
evaluateCurveRangeIntegral(u_##name##_curveMode, u_##name##_minConstant, u_##name##_maxConstant, u_##name##_minKeyTime, u_##name##_minKeyCoef, u_##name##_minIntegral, u_##name##_maxKeyTime, u_##name##_maxKeyCoef, u_##name##_maxIntegral, t, ts, rnd)
|
||||
|
||||
#define EVAL_CURVE_INTEGRAL_TWICE(name, t, ts, rnd) \
|
||||
evaluateCurveRangeIntegralTwice(u_##name##_curveMode, u_##name##_minConstant, u_##name##_maxConstant, u_##name##_minKeyTime, u_##name##_minKeyCoef, u_##name##_minIntegral, u_##name##_maxKeyTime, u_##name##_maxKeyCoef, u_##name##_maxIntegral, t, ts, rnd)
|
||||
|
||||
#define EVAL_GRADIENT_RANGE(name, t, rnd) \
|
||||
evaluateGradientRange(u_##name##_rangeMode, u_##name##_minColor, u_##name##_maxColor, \
|
||||
u_##name##_minGradMode, u_##name##_minColorKeyValue, u_##name##_minColorKeyTime, u_##name##_minAlphaKeyValue, u_##name##_minAlphaKeyTime, \
|
||||
u_##name##_maxGradMode, u_##name##_maxColorKeyValue, u_##name##_maxColorKeyTime, u_##name##_maxAlphaKeyValue, u_##name##_maxAlphaKeyTime, t, rnd);
|
||||
|
||||
in vec4 a_position_starttime; // center position,particle start time
|
||||
in vec4 a_vertIdx_size_angle; // xy:vertex index,z:size,w:angle
|
||||
in vec4 a_color;
|
||||
in vec4 a_dir_life; // xyz:particle start velocity,w:particle lifetime
|
||||
in float a_rndSeed;
|
||||
|
||||
uniform Constants2 {
|
||||
vec4 u_worldRot;
|
||||
float u_psTime;
|
||||
int u_velocity_space;
|
||||
float u_speedModifier;
|
||||
int u_force_space;
|
||||
};
|
||||
|
||||
#if VELOCITY_OVERTIME_MODULE_ENABLE
|
||||
// DECL_CURVE_STRUCT_INT(velocity_pos_x)
|
||||
// DECL_CURVE_STRUCT_INT(velocity_pos_y)
|
||||
// DECL_CURVE_STRUCT_INT(velocity_pos_z)
|
||||
#if USE_STRETCHED_BILLBOARD
|
||||
// DECL_CURVE_STRUCT(velocity_x)
|
||||
// DECL_CURVE_STRUCT(velocity_y)
|
||||
// DECL_CURVE_STRUCT(velocity_z)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if FORCE_OVERTIME_MODULE_ENABLE
|
||||
// DECL_CURVE_STRUCT_INT(force_pos_x)
|
||||
// DECL_CURVE_STRUCT_INT(force_pos_y)
|
||||
// DECL_CURVE_STRUCT_INT(force_pos_z)
|
||||
#if USE_STRETCHED_BILLBOARD
|
||||
// DECL_CURVE_STRUCT_INT(force_vel_x)
|
||||
// DECL_CURVE_STRUCT_INT(force_vel_y)
|
||||
// DECL_CURVE_STRUCT_INT(force_vel_z)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if SIZE_OVERTIME_MODULE_ENABLE
|
||||
// DECL_CURVE_STRUCT(size)
|
||||
#endif
|
||||
|
||||
#if COLOR_OVERTIME_MODULE_ENABLE
|
||||
// DECL_GRADIENT_STRUCT(color)
|
||||
#endif
|
||||
|
||||
#if TEXTURE_ANIMATION_ENABLE
|
||||
// DECL_CURVE_STRUCT(frameOverTime)
|
||||
uniform Animation {
|
||||
float u_cycles;
|
||||
int u_animation_mode;
|
||||
bool u_random_row;
|
||||
int u_row_index;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if ROTATE_OVERTIME_MODULE_ENABLE
|
||||
// DECL_CURVE_STRUCT_INT(rotate)
|
||||
#endif
|
||||
|
||||
float repeat(float t, float length) {
|
||||
return t - floor(t / length) * length;
|
||||
}
|
||||
|
||||
vec4 rotateQuat(vec4 p, vec4 q) {
|
||||
vec3 iv = cross(q.xyz, p.xyz) + q.w * p.xyz;
|
||||
vec3 res = p.xyz + 2.0 * cross(q.xyz, iv);
|
||||
return vec4(res.xyz, p.w);
|
||||
}
|
||||
|
||||
float random(float seed) {
|
||||
seed = mod(seed, 233280.);
|
||||
float q = (seed * 9301. + 49297.) / 233280.;
|
||||
return fract(q);
|
||||
}
|
||||
|
||||
float calcCurveValue(vec4 coef, float t) {
|
||||
return t * (t * (t * coef.x + coef.y) + coef.z) + coef.w;
|
||||
}
|
||||
|
||||
float evaluateCurve(float keyTime[MAX_KEY_NUM], vec4 keyCoef[MAX_KEY_NUM], float normalizedTime) {
|
||||
for (int i = 0; i < MAX_KEY_NUM; i++) {
|
||||
if (keyTime[i] > normalizedTime) {
|
||||
return calcCurveValue(keyCoef[i], normalizedTime - (i == 0 ? 0. : keyTime[i - 1]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float evaluateIntegral(float keyTime[MAX_KEY_NUM], vec4 keyCoef[MAX_KEY_NUM], float integral[MAX_KEY_NUM - 1], float normalizedTime, float ts) {
|
||||
for (int i = 0; i < MAX_KEY_NUM; i++) {
|
||||
if (keyTime[i] > normalizedTime) {
|
||||
float t = normalizedTime - (i == 0 ? 0. : keyTime[i - 1]);
|
||||
return ts * ((i - 1 < 0 ? 0. : integral[i - 1]) + t * calcCurveValue(keyCoef[i], t));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float evaluateIntegralTwice(float keyTime[MAX_KEY_NUM], vec4 keyCoef[MAX_KEY_NUM], float integral[MAX_KEY_NUM - 1], float normalizedTime, float ts) {
|
||||
for (int i = 0; i < MAX_KEY_NUM; i++) {
|
||||
if (keyTime[i] > normalizedTime) {
|
||||
float t = normalizedTime - (i == 0 ? 0. : keyTime[i - 1]);
|
||||
return ts * ts * ((i - 1 < 0 ? 0. : integral[i - 1]) + t * t * calcCurveValue(keyCoef[i], t));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float evaluateCurveRange(int mode, float minConstant, float maxConstant
|
||||
, float minKeyTime[MAX_KEY_NUM], vec4 minKeyCoef[MAX_KEY_NUM]
|
||||
, float maxKeyTime[MAX_KEY_NUM], vec4 maxKeyCoef[MAX_KEY_NUM]
|
||||
, float t, float rnd) {
|
||||
if (mode == CURVE_MODE_CONSTANT) {
|
||||
return minConstant;
|
||||
} else if (mode == CURVE_MODE_RANDOM_CONSTANT) {
|
||||
return mix(minConstant, maxConstant, random(rnd));
|
||||
} else if (mode == CURVE_MODE_CURVE) {
|
||||
return evaluateCurve(minKeyTime, minKeyCoef, t);
|
||||
} else if (mode == CURVE_MODE_RANDOM_CURVE) {
|
||||
return mix(evaluateCurve(minKeyTime, minKeyCoef, t), evaluateCurve(maxKeyTime, maxKeyCoef, t), random(rnd));
|
||||
}
|
||||
}
|
||||
|
||||
float evaluateCurveRangeIntegral(int mode, float minConstant, float maxConstant
|
||||
, float minKeyTime[MAX_KEY_NUM], vec4 minKeyCoef[MAX_KEY_NUM], float minIntegral[MAX_KEY_NUM - 1]
|
||||
, float maxKeyTime[MAX_KEY_NUM], vec4 maxKeyCoef[MAX_KEY_NUM], float maxIntegral[MAX_KEY_NUM - 1]
|
||||
, float t, float ts, float rnd) {
|
||||
if (mode == CURVE_MODE_CONSTANT) {
|
||||
return minConstant * t * ts;
|
||||
} else if (mode == CURVE_MODE_RANDOM_CONSTANT) {
|
||||
return mix(minConstant, maxConstant, random(rnd)) * t * ts;
|
||||
} else if (mode == CURVE_MODE_CURVE) {
|
||||
return evaluateIntegral(minKeyTime, minKeyCoef, minIntegral, t, ts);
|
||||
} else if (mode == CURVE_MODE_RANDOM_CURVE) {
|
||||
return mix(evaluateIntegral(minKeyTime, minKeyCoef, minIntegral, t, ts), evaluateIntegral(maxKeyTime, maxKeyCoef, maxIntegral, t, ts), random(rnd));
|
||||
}
|
||||
}
|
||||
|
||||
float evaluateCurveRangeIntegralTwice(int mode, float minConstant, float maxConstant
|
||||
, float minKeyTime[MAX_KEY_NUM], vec4 minKeyCoef[MAX_KEY_NUM], float minIntegral[MAX_KEY_NUM - 1]
|
||||
, float maxKeyTime[MAX_KEY_NUM], vec4 maxKeyCoef[MAX_KEY_NUM], float maxIntegral[MAX_KEY_NUM - 1]
|
||||
, float t, float ts, float rnd) {
|
||||
if (mode == CURVE_MODE_CONSTANT) {
|
||||
return minConstant * t * t * ts * ts / 2.;
|
||||
} else if (mode == CURVE_MODE_RANDOM_CONSTANT) {
|
||||
return mix(minConstant, maxConstant, random(rnd)) * t * t * ts * ts / 2.;
|
||||
} else if (mode == CURVE_MODE_CURVE) {
|
||||
return evaluateIntegralTwice(minKeyTime, minKeyCoef, minIntegral, t, ts);
|
||||
} else if (mode == CURVE_MODE_RANDOM_CURVE) {
|
||||
return mix(evaluateIntegralTwice(minKeyTime, minKeyCoef, minIntegral, t, ts), evaluateIntegralTwice(maxKeyTime, maxKeyCoef, maxIntegral, t, ts), random(rnd));
|
||||
}
|
||||
}
|
||||
|
||||
vec4 evaluateGradient(int mode, float colorKeyTime[MAX_KEY_NUM], vec3 colorKeyValue[MAX_KEY_NUM]
|
||||
, float alphaKeyTime[MAX_KEY_NUM], float alphaKeyValue[MAX_KEY_NUM]
|
||||
, float t){
|
||||
vec4 ret;
|
||||
for (int i = 0; i < MAX_KEY_NUM; i++) {
|
||||
if (t < colorKeyTime[i]) {
|
||||
if (mode == GRADIENT_MODE_FIX) {
|
||||
ret.xyz = colorKeyValue[i];
|
||||
} else if (mode == GRADIENT_MODE_BLEND) {
|
||||
ret.xyz = mix(colorKeyValue[i - 1], colorKeyValue[i], (t - colorKeyTime[i - 1]) / (colorKeyTime[i] - colorKeyTime[i - 1]));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < MAX_KEY_NUM; i++) {
|
||||
if (t < alphaKeyTime[i]) {
|
||||
if (mode == GRADIENT_MODE_FIX) {
|
||||
ret.w = alphaKeyValue[i];
|
||||
} else if (mode == GRADIENT_MODE_BLEND) {
|
||||
ret.w = mix(alphaKeyValue[i - 1], alphaKeyValue[i], (t - alphaKeyTime[i - 1]) / (alphaKeyTime[i] - alphaKeyTime[i - 1]));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
vec4 evaluateGradientRange(int rangeMode, vec4 minColor, vec4 maxColor,
|
||||
int minGradMode, vec3 minColorKeyValue[MAX_KEY_NUM], float minColorKeyTime[MAX_KEY_NUM], float minAlphaKeyValue[MAX_KEY_NUM], float minAlphaKeyTime[MAX_KEY_NUM],
|
||||
int maxGradMode, vec3 maxColorKeyValue[MAX_KEY_NUM], float maxColorKeyTime[MAX_KEY_NUM], float maxAlphaKeyValue[MAX_KEY_NUM], float maxAlphaKeyTime[MAX_KEY_NUM],
|
||||
float t, float rnd){
|
||||
if (rangeMode == GRADIENT_RANGE_MODE_COLOR) {
|
||||
return minColor;
|
||||
} else if (rangeMode == GRADIENT_RANGE_MODE_TWO_COLOR) {
|
||||
return mix(minColor, maxColor, rnd);
|
||||
} else if (rangeMode == GRADIENT_RANGE_MODE_GRADIENT) {
|
||||
return evaluateGradient(minGradMode, minColorKeyTime, minColorKeyValue, minAlphaKeyTime, minAlphaKeyValue, t);
|
||||
} else if (rangeMode == GRADIENT_RANGE_MODE_TWO_GRADIENT) {
|
||||
return mix(evaluateGradient(minGradMode, minColorKeyTime, minColorKeyValue, minAlphaKeyTime, minAlphaKeyValue, t),
|
||||
evaluateGradient(maxGradMode, maxColorKeyTime, maxColorKeyValue, maxAlphaKeyTime, maxAlphaKeyValue, t), rnd);
|
||||
}
|
||||
}
|
||||
|
||||
vec4 gpvs_main() {
|
||||
vec4 pos = vec4(a_position_starttime.xyz, 1.);
|
||||
float activeTime = u_psTime - a_position_starttime.w;
|
||||
float normalizedTime = activeTime / a_dir_life.w;
|
||||
|
||||
#if VELOCITY_OVERTIME_MODULE_ENABLE
|
||||
float speedModifier = u_speedModifier;
|
||||
#else
|
||||
float speedModifier = 1.;
|
||||
#endif
|
||||
pos.xyz += a_dir_life.xyz * activeTime * speedModifier;
|
||||
|
||||
#if USE_STRETCHED_BILLBOARD
|
||||
vec4 velocity = vec4(a_dir_life.xyz, 0.);
|
||||
velocity *= speedModifier;
|
||||
#endif
|
||||
#if !USE_WORLD_SPACE
|
||||
pos = cc_matWorld * pos;
|
||||
#if USE_STRETCHED_BILLBOARD
|
||||
velocity = rotateQuat(velocity, u_worldRot);
|
||||
#endif
|
||||
#endif
|
||||
#if VELOCITY_OVERTIME_MODULE_ENABLE
|
||||
vec4 velocityTrack = vec4(EVAL_CURVE_INTEGRAL(velocity_pos_x, normalizedTime, a_dir_life.w, a_rndSeed + VELOCITY_OVERTIME_RAND_OFFSET), EVAL_CURVE_INTEGRAL(velocity_pos_y, normalizedTime, a_dir_life.w, a_rndSeed + VELOCITY_OVERTIME_RAND_OFFSET), EVAL_CURVE_INTEGRAL(velocity_pos_z, normalizedTime, a_dir_life.w, a_rndSeed + VELOCITY_OVERTIME_RAND_OFFSET), 0);
|
||||
velocityTrack = velocityTrack * speedModifier;
|
||||
if (u_velocity_space == SIMULATE_SPACE_LOCAL) {
|
||||
velocityTrack = rotateQuat(velocityTrack, u_worldRot);
|
||||
}
|
||||
pos += velocityTrack;
|
||||
#if USE_STRETCHED_BILLBOARD
|
||||
vec4 velocityVel = vec4(EVAL_CURVE_RANGE(velocity_x, normalizedTime, a_dir_life.w, a_rndSeed + VELOCITY_OVERTIME_RAND_OFFSET), EVAL_CURVE_RANGE(velocity_y, normalizedTime, a_dir_life.w, a_rndSeed + VELOCITY_OVERTIME_RAND_OFFSET), EVAL_CURVE_RANGE(velocity_z, normalizedTime, a_dir_life.w, a_rndSeed + VELOCITY_OVERTIME_RAND_OFFSET), 0);
|
||||
if (u_velocity_space == SIMULATE_SPACE_LOCAL) {
|
||||
velocityVel = rotateQuat(velocityVel, u_worldRot);
|
||||
}
|
||||
velocityVel *= speedModifier;
|
||||
velocity += velocityVel;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if FORCE_OVERTIME_MODULE_ENABLE
|
||||
vec4 forceTrack = vec4(EVAL_CURVE_INTEGRAL_TWICE(force_pos_x, normalizedTime, a_dir_life.w, a_rndSeed + FORCE_OVERTIME_RAND_OFFSET), EVAL_CURVE_INTEGRAL_TWICE(force_pos_y, normalizedTime, a_dir_life.w, a_rndSeed + FORCE_OVERTIME_RAND_OFFSET), EVAL_CURVE_INTEGRAL_TWICE(force_pos_z, normalizedTime, a_dir_life.w, a_rndSeed + FORCE_OVERTIME_RAND_OFFSET), 0);
|
||||
forceTrack = forceTrack * speedModifier;
|
||||
if (u_force_space == SIMULATE_SPACE_LOCAL) {
|
||||
forceTrack = rotateQuat(forceTrack, u_worldRot);
|
||||
}
|
||||
pos += forceTrack;
|
||||
#if USE_STRETCHED_BILLBOARD
|
||||
vec4 forceVel = vec4(EVAL_CURVE_INTEGRAL(force_vel_x, normalizedTime, a_dir_life.w, a_rndSeed + FORCE_OVERTIME_RAND_OFFSET), EVAL_CURVE_INTEGRAL(force_vel_y, normalizedTime, a_dir_life.w, a_rndSeed + FORCE_OVERTIME_RAND_OFFSET), EVAL_CURVE_INTEGRAL(force_vel_z, normalizedTime, a_dir_life.w, a_rndSeed + FORCE_OVERTIME_RAND_OFFSET), 0);
|
||||
if (u_force_space == SIMULATE_SPACE_LOCAL) {
|
||||
forceVel = rotateQuat(forceVel, u_worldRot);
|
||||
}
|
||||
forceVel *= speedModifier;
|
||||
velocity += forceVel;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
float size = a_vertIdx_size_angle.z;
|
||||
#if SIZE_OVERTIME_MODULE_ENABLE
|
||||
float sizeModifier = EVAL_CURVE_RANGE(size, normalizedTime, a_rndSeed + SIZE_OVERTIME_RAND_OFFSET);
|
||||
size *= sizeModifier;
|
||||
#endif
|
||||
|
||||
vec2 cornerOffset = vec2((a_vertIdx_size_angle.xy - 0.5) * size);
|
||||
#if !USE_STRETCHED_BILLBOARD
|
||||
float angle = a_vertIdx_size_angle.w;
|
||||
#if ROTATE_OVERTIME_MODULE_ENABLE
|
||||
angle += EVAL_CURVE_INTEGRAL(rotate, normalizedTime, a_dir_life.w, a_rndSeed + ROTATION_OVERTIME_RAND_OFFSET);
|
||||
#endif
|
||||
rotateCorner(cornerOffset, angle);
|
||||
#endif
|
||||
|
||||
computeVertPos(pos, cornerOffset
|
||||
#if USE_BILLBOARD || USE_VERTICAL_BILLBOARD
|
||||
, cc_matView
|
||||
#endif
|
||||
#if USE_STRETCHED_BILLBOARD
|
||||
, cc_cameraPos
|
||||
, velocity
|
||||
, velocityScale
|
||||
, lengthScale
|
||||
, size
|
||||
, a_vertIdx_size_angle.x
|
||||
#endif
|
||||
);
|
||||
|
||||
pos = cc_matViewProj * pos;
|
||||
|
||||
float frameIndex = 0.;
|
||||
#if TEXTURE_ANIMATION_ENABLE
|
||||
if (u_animation_mode == ANIMATION_MODE_WHOLE_SHEET) {
|
||||
frameIndex = repeat(u_cycles * EVAL_CURVE_RANGE(frameOverTime, normalizedTime, a_rndSeed + TEXTURE_ANIMATION_RAND_OFFSET), 1.);
|
||||
} else if (u_animation_mode == ANIMATION_MODE_SINGLE_ROW) {
|
||||
float rowLength = 1. / frameTile_velLenScale.y;
|
||||
if (u_random_row) {
|
||||
float f = repeat(u_cycles * EVAL_CURVE_RANGE(frameOverTime, normalizedTime, a_rndSeed + TEXTURE_ANIMATION_RAND_OFFSET), 1.);
|
||||
float startRow = floor(random(floor(u_psTime * 1000.)) * frameTile_velLenScale.y);
|
||||
float from = startRow * rowLength;
|
||||
float to = from + rowLength;
|
||||
frameIndex = mix(from, to, f);
|
||||
}
|
||||
else {
|
||||
float from = float(u_row_index) * rowLength;
|
||||
float to = from + rowLength;
|
||||
frameIndex = mix(from, to, repeat(u_cycles * EVAL_CURVE_RANGE(frameOverTime, normalizedTime, a_rndSeed + TEXTURE_ANIMATION_RAND_OFFSET), 1.));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
uv = computeUV(frameIndex, a_vertIdx_size_angle.xy, frameTile_velLenScale.xy) * mainTiling_Offset.xy + mainOffset.zw;
|
||||
|
||||
#if COLOR_OVERTIME_MODULE_ENABLE
|
||||
color = a_color * EVAL_GRADIENT_RANGE(color, normalizedTime, a_rndSeed + COLOR_OVERTIME_RAND_OFFSET);
|
||||
#else
|
||||
color = a_color;
|
||||
#endif
|
||||
|
||||
return pos;
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
|
||||
precision highp float;
|
||||
#include <transform>
|
||||
#include <particle-common>
|
||||
#include <cc-local>
|
||||
|
||||
in vec3 a_position; // center position
|
||||
in vec3 a_texCoord; // xy:vertex index,z:frame index
|
||||
in vec3 a_texCoord1; // size
|
||||
in vec3 a_texCoord2; // rotation
|
||||
in vec4 a_color;
|
||||
|
||||
#if CC_USE_STRETCHED_BILLBOARD
|
||||
in vec3 a_color1; // velocity.x, velocity.y, velocity.z, scale
|
||||
#endif
|
||||
|
||||
#if CC_USE_MESH
|
||||
in vec3 a_texCoord3; // mesh vertices
|
||||
in vec3 a_normal; // mesh normal
|
||||
in vec4 a_color1; // mesh color
|
||||
#endif
|
||||
|
||||
vec4 lpvs_main() {
|
||||
vec3 compScale = scale.xyz * a_texCoord1;
|
||||
vec4 pos = vec4(a_position, 1);
|
||||
#if CC_USE_STRETCHED_BILLBOARD
|
||||
vec4 velocity = vec4(a_color1.xyz, 0);
|
||||
#endif
|
||||
|
||||
#if !CC_USE_WORLD_SPACE
|
||||
// simulate in world space. apply cc_matWorld matrix on CPU side.
|
||||
pos = cc_matWorld * pos;
|
||||
#if CC_USE_STRETCHED_BILLBOARD
|
||||
velocity = cc_matWorld * velocity;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !CC_USE_MESH
|
||||
vec2 cornerOffset = vec2((a_texCoord.xy - 0.5));
|
||||
|
||||
#if CC_USE_BILLBOARD
|
||||
vec3 rotEuler = a_texCoord2;
|
||||
#elif CC_USE_STRETCHED_BILLBOARD
|
||||
vec3 rotEuler = vec3(0.);
|
||||
#else
|
||||
vec3 rotEuler = vec3(0., 0., a_texCoord2.z);
|
||||
#endif
|
||||
|
||||
computeVertPos(pos, cornerOffset, quaternionFromEuler(rotEuler), compScale
|
||||
#if CC_USE_BILLBOARD || CC_USE_VERTICAL_BILLBOARD
|
||||
, cc_matViewInv
|
||||
#endif
|
||||
#if CC_USE_STRETCHED_BILLBOARD
|
||||
, cc_cameraPos.xyz
|
||||
, velocity
|
||||
, frameTile_velLenScale.z
|
||||
, frameTile_velLenScale.w
|
||||
, a_texCoord.x
|
||||
#endif
|
||||
);
|
||||
|
||||
color = a_color;
|
||||
#else
|
||||
mat4 xformNoScale = matrixFromRT(quaternionFromEuler(a_texCoord2), pos.xyz);
|
||||
mat4 xform = matFromRTS(quaternionFromEuler(a_texCoord2), pos.xyz, compScale);
|
||||
pos = xform * vec4(a_texCoord3, 1);
|
||||
vec4 normal = xformNoScale * vec4(a_normal, 0);
|
||||
color = a_color * a_color1;
|
||||
#endif
|
||||
uv = computeUV(a_texCoord.z, a_texCoord.xy, frameTile_velLenScale.xy) * mainTiling_Offset.xy + mainTiling_Offset.zw;
|
||||
|
||||
pos = cc_matViewProj * pos;
|
||||
|
||||
return pos;
|
||||
}
|
||||
102
engine/cocos2d/renderer/build/chunks/shader/phong-fs.inc
Normal file
102
engine/cocos2d/renderer/build/chunks/shader/phong-fs.inc
Normal file
@@ -0,0 +1,102 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
precision highp float;
|
||||
|
||||
#include <cc-global>
|
||||
#include <texture>
|
||||
#include <output>
|
||||
#include <alpha-test>
|
||||
|
||||
uniform PhongFrag {
|
||||
lowp vec4 diffuseColor;
|
||||
lowp vec4 specularColor;
|
||||
lowp vec4 emissiveColor;
|
||||
float glossiness;
|
||||
};
|
||||
|
||||
#if USE_DIFFUSE_TEXTURE
|
||||
uniform sampler2D diffuseTexture;
|
||||
#endif
|
||||
|
||||
#if USE_SPECULAR && USE_SPECULAR_TEXTURE
|
||||
uniform sampler2D specularTexture;
|
||||
#endif
|
||||
|
||||
#if USE_EMISSIVE && USE_EMISSIVE_TEXTURE
|
||||
uniform sampler2D emissiveTexture;
|
||||
#endif
|
||||
|
||||
#if USE_NORMAL_TEXTURE
|
||||
in vec3 v_tangent;
|
||||
in vec3 v_bitangent;
|
||||
uniform sampler2D normalTexture;
|
||||
#endif
|
||||
|
||||
#define CC_USE_TEXTURE CC_USE_ATTRIBUTE_UV0 && (USE_DIFFUSE_TEXTURE || (USE_EMISSIVE && USE_EMISSIVE_TEXTURE) || (USE_SPECULAR && USE_SPECULAR_TEXTURE) || USE_NORMAL_TEXTURE)
|
||||
|
||||
in vec3 v_worldNormal;
|
||||
in vec3 v_worldPos;
|
||||
in vec3 v_viewDirection;
|
||||
|
||||
#if CC_USE_TEXTURE
|
||||
in mediump vec2 v_uv0;
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_COLOR
|
||||
in lowp vec4 v_color;
|
||||
#endif
|
||||
|
||||
#include <shading-phong>
|
||||
|
||||
void surf (out PhongSurface s) {
|
||||
vec4 diffuse = vec4(1, 1, 1, 1);
|
||||
|
||||
#if CC_USE_ATTRIBUTE_COLOR
|
||||
diffuse *= v_color;
|
||||
#endif
|
||||
|
||||
diffuse *= diffuseColor;
|
||||
#if USE_DIFFUSE_TEXTURE
|
||||
CCTexture(diffuseTexture, v_uv0, diffuse);
|
||||
#endif
|
||||
|
||||
ALPHA_TEST(diffuse);
|
||||
|
||||
s.diffuse = diffuse.rgb;
|
||||
s.opacity = diffuse.a;
|
||||
|
||||
#if USE_EMISSIVE
|
||||
s.emissive = emissiveColor.rgb;
|
||||
#if USE_EMISSIVE_TEXTURE
|
||||
CCTextureRGB(emissiveTexture, v_uv0, s.emissive);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if USE_SPECULAR
|
||||
s.specular = specularColor.rgb;
|
||||
#if USE_SPECULAR_TEXTURE
|
||||
CCTextureRGB(specularTexture, v_uv0, s.specular);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
s.normal = v_worldNormal;
|
||||
#if USE_NORMAL_TEXTURE
|
||||
vec3 nmmp = texture(normalTexture, v_uv0).xyz - vec3(0.5);
|
||||
s.normal =
|
||||
nmmp.x * normalize(v_tangent) +
|
||||
nmmp.y * normalize(v_bitangent) +
|
||||
nmmp.z * normalize(s.normal);
|
||||
s.normal = normalize(s.normal);
|
||||
#endif
|
||||
|
||||
s.position = v_worldPos;
|
||||
s.viewDirection = v_viewDirection;
|
||||
s.glossiness = glossiness;
|
||||
}
|
||||
|
||||
void main () {
|
||||
PhongSurface s;
|
||||
surf(s);
|
||||
vec4 color = CCPhongShading(s);
|
||||
gl_FragColor = CCFragOutput(color);
|
||||
}
|
||||
60
engine/cocos2d/renderer/build/chunks/shader/phong-vs.inc
Normal file
60
engine/cocos2d/renderer/build/chunks/shader/phong-vs.inc
Normal file
@@ -0,0 +1,60 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
precision highp float;
|
||||
|
||||
#include <cc-local>
|
||||
#include <cc-global>
|
||||
#include <input-standard>
|
||||
#include <shadow>
|
||||
|
||||
#define CC_USE_TEXTURE CC_USE_ATTRIBUTE_UV0 && (USE_DIFFUSE_TEXTURE || USE_EMISSIVE_TEXTURE || USE_SPECULAR_TEXTURE || USE_NORMAL_TEXTURE)
|
||||
|
||||
uniform MAIN_TILING {
|
||||
vec2 mainTiling;
|
||||
vec2 mainOffset;
|
||||
};
|
||||
|
||||
#if CC_USE_TEXTURE
|
||||
out mediump vec2 v_uv0;
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_COLOR
|
||||
out lowp vec4 v_color;
|
||||
#endif
|
||||
|
||||
#if USE_NORMAL_TEXTURE
|
||||
out vec3 v_tangent;
|
||||
out vec3 v_bitangent;
|
||||
#endif
|
||||
|
||||
out vec3 v_worldNormal;
|
||||
out vec3 v_worldPos;
|
||||
out vec3 v_viewDirection;
|
||||
|
||||
void main () {
|
||||
StandardVertInput In;
|
||||
CCVertInput(In);
|
||||
|
||||
vec4 position = In.position;
|
||||
|
||||
v_worldNormal = normalize((cc_matWorldIT * vec4(In.normal, 0)).xyz);
|
||||
v_worldPos = (cc_matWorld * position).xyz;
|
||||
v_viewDirection = normalize(cc_cameraPos.xyz - v_worldPos);
|
||||
|
||||
#if CC_USE_TEXTURE
|
||||
v_uv0 = In.uv * mainTiling + mainOffset;
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_COLOR
|
||||
v_color = In.color;
|
||||
#endif
|
||||
|
||||
#if USE_NORMAL_TEXTURE
|
||||
v_tangent = normalize((cc_matWorld * vec4(In.tangent.xyz, 0.0)).xyz);
|
||||
v_bitangent = cross(v_worldNormal, v_tangent) * In.tangent.w; // note the cross order
|
||||
#endif
|
||||
|
||||
CCShadowInput(v_worldPos);
|
||||
|
||||
gl_Position = cc_matViewProj * cc_matWorld * position;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
precision highp float;
|
||||
|
||||
in float v_depth;
|
||||
|
||||
#include <packing>
|
||||
|
||||
void main () {
|
||||
gl_FragColor = packDepthToRGBA(v_depth);
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
precision highp float;
|
||||
|
||||
in vec3 a_position;
|
||||
|
||||
#include <cc-local>
|
||||
|
||||
#pragma builtin(global)
|
||||
uniform CC_SHADOW_MAP {
|
||||
mat4 cc_shadow_map_lightViewProjMatrix;
|
||||
vec4 cc_shadow_map_info; // [minDepth, maxDepth, depthScale, darkness]
|
||||
float cc_shadow_map_bias;
|
||||
};
|
||||
|
||||
out float v_depth;
|
||||
|
||||
#include <skinning>
|
||||
|
||||
void main () {
|
||||
vec4 position = vec4(a_position, 1);
|
||||
|
||||
SKIN_VERTEX(position);
|
||||
|
||||
gl_Position = cc_shadow_map_lightViewProjMatrix * cc_matWorld * position;
|
||||
|
||||
// compute v_depth according to active camera's minDepth and maxDepth.
|
||||
v_depth = ((gl_Position.z + cc_shadow_map_info.x) / (cc_shadow_map_info.x + cc_shadow_map_info.y)) + cc_shadow_map_bias;
|
||||
}
|
||||
41
engine/cocos2d/renderer/build/chunks/shader/unlit-fs.inc
Normal file
41
engine/cocos2d/renderer/build/chunks/shader/unlit-fs.inc
Normal file
@@ -0,0 +1,41 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
precision highp float;
|
||||
|
||||
#include <alpha-test>
|
||||
#include <texture>
|
||||
#include <output>
|
||||
|
||||
uniform UNLIT {
|
||||
lowp vec4 diffuseColor;
|
||||
};
|
||||
|
||||
#if USE_DIFFUSE_TEXTURE
|
||||
uniform sampler2D diffuseTexture;
|
||||
#endif
|
||||
|
||||
#define CC_USE_TEXTURE CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE
|
||||
|
||||
#if CC_USE_ATTRIBUTE_COLOR
|
||||
in lowp vec4 v_color;
|
||||
#endif
|
||||
|
||||
#if CC_USE_TEXTURE
|
||||
in mediump vec2 v_uv0;
|
||||
#endif
|
||||
|
||||
void main () {
|
||||
vec4 color = diffuseColor;
|
||||
|
||||
#if CC_USE_TEXTURE
|
||||
CCTexture(diffuseTexture, v_uv0, color);
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_COLOR
|
||||
color *= v_color;
|
||||
#endif
|
||||
|
||||
ALPHA_TEST(color);
|
||||
|
||||
gl_FragColor = CCFragOutput(color);
|
||||
}
|
||||
38
engine/cocos2d/renderer/build/chunks/shader/unlit-vs.inc
Normal file
38
engine/cocos2d/renderer/build/chunks/shader/unlit-vs.inc
Normal file
@@ -0,0 +1,38 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
precision highp float;
|
||||
|
||||
#include <cc-local>
|
||||
#include <cc-global>
|
||||
#include <skinning>
|
||||
#include <input-standard>
|
||||
|
||||
#define CC_USE_TEXTURE CC_USE_ATTRIBUTE_UV0 && USE_DIFFUSE_TEXTURE
|
||||
|
||||
uniform MAIN_TILING {
|
||||
vec2 mainTiling;
|
||||
vec2 mainOffset;
|
||||
};
|
||||
|
||||
#if CC_USE_TEXTURE
|
||||
out mediump vec2 v_uv0;
|
||||
#endif
|
||||
|
||||
#if CC_USE_ATTRIBUTE_COLOR
|
||||
out lowp vec4 v_color;
|
||||
#endif
|
||||
|
||||
void main () {
|
||||
StandardVertInput In;
|
||||
CCVertInput(In);
|
||||
|
||||
#if CC_USE_ATTRIBUTE_COLOR
|
||||
v_color = In.color;
|
||||
#endif
|
||||
|
||||
#if CC_USE_TEXTURE
|
||||
v_uv0 = In.uv * mainTiling + mainOffset;
|
||||
#endif
|
||||
|
||||
gl_Position = cc_matViewProj * cc_matWorld * In.position;
|
||||
}
|
||||
59
engine/cocos2d/renderer/build/chunks/shading-phong.inc
Normal file
59
engine/cocos2d/renderer/build/chunks/shading-phong.inc
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
#include <cc-lights>
|
||||
|
||||
struct PhongSurface {
|
||||
vec3 diffuse;
|
||||
vec3 emissive;
|
||||
vec3 specular;
|
||||
float opacity;
|
||||
|
||||
float glossiness;
|
||||
|
||||
vec3 position;
|
||||
vec3 normal;
|
||||
vec3 viewDirection;
|
||||
};
|
||||
|
||||
Lighting brdf (PhongSurface s, LightInfo info) {
|
||||
Lighting result;
|
||||
float ndh = 0.0;
|
||||
// Get the half direction in world space
|
||||
vec3 halfDir = normalize(s.viewDirection + info.lightDir);
|
||||
float NdotH = max(0.0, dot(s.normal, halfDir));
|
||||
NdotH = pow(NdotH, max(1.0, s.glossiness * 128.0));
|
||||
|
||||
result.diffuse = info.radiance * max(0.0, dot(s.normal, info.lightDir));
|
||||
result.specular = info.radiance * NdotH;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
vec4 composePhongShading (Lighting lighting, PhongSurface s) {
|
||||
vec4 o = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
|
||||
//diffuse is always calculated
|
||||
o.rgb = lighting.diffuse * s.diffuse;
|
||||
|
||||
#if USE_EMISSIVE
|
||||
o.rgb += s.emissive;
|
||||
#endif
|
||||
|
||||
#if USE_SPECULAR
|
||||
o.rgb += lighting.specular * s.specular;
|
||||
#endif
|
||||
|
||||
o.a = s.opacity;
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
vec3 ambient(PhongSurface s, vec4 ambientColor) {
|
||||
return s.diffuse * ambientColor.rgb;
|
||||
}
|
||||
|
||||
vec4 CCPhongShading (in PhongSurface s) {
|
||||
Lighting result;
|
||||
CC_CALC_LIGHTS(s, result, brdf, ambient)
|
||||
|
||||
return composePhongShading(result, s);
|
||||
}
|
||||
72
engine/cocos2d/renderer/build/chunks/shading-toon.inc
Normal file
72
engine/cocos2d/renderer/build/chunks/shading-toon.inc
Normal file
@@ -0,0 +1,72 @@
|
||||
// Copyright (c) 2017-2019 Xiamen Yaji Software Co., Ltd.
|
||||
#include <cc-global>
|
||||
#include <cc-lights>
|
||||
|
||||
struct ToonSurface {
|
||||
vec4 baseColor;
|
||||
// specular
|
||||
vec3 specular;
|
||||
float specularThreshold;
|
||||
// these need to be in the same coordinate system
|
||||
vec3 position;
|
||||
vec3 normal;
|
||||
vec3 viewDirection;
|
||||
// emissive
|
||||
vec3 emissive;
|
||||
// shadow
|
||||
vec3 shadowColor;
|
||||
float shadowIntensity;
|
||||
vec3 highlightColor;
|
||||
// light
|
||||
float lightThreshold;
|
||||
float lightSmoothness;
|
||||
};
|
||||
|
||||
const float T_H = 0.25;
|
||||
float TreshHoldLighting(float lThreshold, float smoothness, float v) {
|
||||
return smoothstep(lThreshold-smoothness*T_H, lThreshold+smoothness*T_H, v);
|
||||
}
|
||||
|
||||
Lighting toon (ToonSurface s, LightInfo info) {
|
||||
Lighting result;
|
||||
|
||||
vec3 N = s.normal;
|
||||
vec3 L = info.lightDir;
|
||||
vec3 V = s.viewDirection;
|
||||
vec3 H = normalize(L + V);
|
||||
float NL = 0.5 * dot(N, L) + 0.5;
|
||||
float NH = 0.5 * dot(H, N) + 0.5;
|
||||
|
||||
vec3 c = vec3(0.0);
|
||||
|
||||
vec3 attenuation = info.radiance;
|
||||
vec3 lightColor = info.lightColor.rgb;
|
||||
|
||||
// diffuse
|
||||
vec3 shadowColor = mix(s.highlightColor * lightColor, s.shadowColor, s.shadowIntensity);
|
||||
vec3 diffuse = TreshHoldLighting(s.lightThreshold, s.lightSmoothness, NL) * attenuation;
|
||||
diffuse = mix(shadowColor, s.highlightColor * lightColor, diffuse);
|
||||
|
||||
result.diffuse = diffuse * s.baseColor.rgb;
|
||||
|
||||
// specular
|
||||
float specularWeight = 1.0 - pow(s.specularThreshold, 5.0);
|
||||
float specularMask = step(specularWeight, NH);
|
||||
vec3 specular = s.specular.rgb * specularMask;
|
||||
|
||||
result.specular = specular * attenuation;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
vec3 ambient(ToonSurface s, vec4 ambientColor) {
|
||||
return s.baseColor.rgb * ambientColor.rgb;
|
||||
}
|
||||
|
||||
vec4 CCToonShading (ToonSurface s) {
|
||||
Lighting result;
|
||||
CC_CALC_LIGHTS(s, result, toon, ambient)
|
||||
|
||||
vec3 finalColor = result.diffuse + result.specular + s.emissive;
|
||||
return vec4(finalColor, s.baseColor.a);
|
||||
}
|
||||
100
engine/cocos2d/renderer/build/chunks/shadow.inc
Normal file
100
engine/cocos2d/renderer/build/chunks/shadow.inc
Normal file
@@ -0,0 +1,100 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
#define CC_MAX_SHADOW_LIGHTS 2
|
||||
|
||||
#define CC_SHADOW_TYPE_HARD 2
|
||||
#define CC_SHADOW_TYPE_SOFT_PCF3X3 3
|
||||
#define CC_SHADOW_TYPE_SOFT_PCF5X5 4
|
||||
|
||||
#define CC_DEFINE_SHADOW_MAP(index) \
|
||||
#if CC_NUM_SHADOW_LIGHTS > index \
|
||||
#pragma builtin(global) \
|
||||
uniform sampler2D cc_shadow_map_##index; \
|
||||
#endif
|
||||
|
||||
#if CC_USE_SHADOW_MAP && CC_NUM_SHADOW_LIGHTS > 0
|
||||
|
||||
#pragma builtin(global)
|
||||
uniform CC_SHADOW {
|
||||
mat4 cc_shadow_lightViewProjMatrix[CC_MAX_SHADOW_LIGHTS];
|
||||
vec4 cc_shadow_info[CC_MAX_SHADOW_LIGHTS]; // [minDepth, maxDepth, shadow resolution, darkness]
|
||||
};
|
||||
|
||||
CC_DEFINE_SHADOW_MAP(0)
|
||||
CC_DEFINE_SHADOW_MAP(1)
|
||||
|
||||
varying vec4 v_posLightSpace[CC_MAX_SHADOW_LIGHTS];
|
||||
varying float v_depth[CC_MAX_SHADOW_LIGHTS];
|
||||
#endif
|
||||
|
||||
void CCShadowInput (vec3 worldPos) {
|
||||
#if CC_USE_SHADOW_MAP && CC_NUM_SHADOW_LIGHTS > 0
|
||||
for (int i = 0; i < CC_NUM_SHADOW_LIGHTS; i++) {
|
||||
v_posLightSpace[i] = cc_shadow_lightViewProjMatrix[i] * vec4(worldPos, 1.0);
|
||||
v_depth[i] = (v_posLightSpace[i].z + cc_shadow_info[i].x) / (cc_shadow_info[i].x + cc_shadow_info[i].y);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#include <packing>
|
||||
|
||||
float getDepth(sampler2D shadowMap, vec2 shadowUV) {
|
||||
return unpackRGBAToDepth(texture(shadowMap, shadowUV));
|
||||
}
|
||||
|
||||
float computeFallOff(float shadow, vec2 coords, float frustumEdgeFalloff) {
|
||||
// float mask = smoothstep(1.0 - frustumEdgeFalloff, 1.0, clamp(dot(coords, coords), 0.0, 1.0));
|
||||
// return mix(esm, 1.0, mask);
|
||||
return shadow;
|
||||
}
|
||||
|
||||
// standard hard shadow
|
||||
float shadowSimple(sampler2D shadowMap, vec2 shadowUV, float currentDepth, float darkness) {
|
||||
float closestDepth = getDepth(shadowMap, shadowUV);
|
||||
return currentDepth > closestDepth ? 1.0 - darkness : 1.0;
|
||||
}
|
||||
|
||||
// PCF
|
||||
float shadowPCF3X3(sampler2D shadowMap, vec2 shadowUV, float currentDepth, float darkness, float shadowSize) {
|
||||
float shadow = 0.0;
|
||||
for (int x = -1; x <= 1; ++x) {
|
||||
for (int y = -1; y <= 1; ++y) {
|
||||
float closestDepth = getDepth(shadowMap, shadowUV + vec2(x, y) * 1.0/shadowSize);
|
||||
shadow += currentDepth > closestDepth ? 1.0 - darkness : 1.0;
|
||||
}
|
||||
}
|
||||
shadow /= 9.0;
|
||||
return shadow;
|
||||
}
|
||||
float shadowPCF5X5(sampler2D shadowMap, vec2 shadowUV, float currentDepth, float darkness, float shadowSize) {
|
||||
float shadow = 0.0;
|
||||
for (int x = -2; x <= 2; ++x) {
|
||||
for (int y = -2; y <= 2; ++y) {
|
||||
float closestDepth = getDepth(shadowMap, shadowUV + vec2(x, y) * 1.0/shadowSize);
|
||||
shadow += currentDepth > closestDepth ? 1.0 - darkness : 1.0;
|
||||
}
|
||||
}
|
||||
shadow /= 25.0;
|
||||
return shadow;
|
||||
}
|
||||
|
||||
#define CC_CALC_SHADOW(index, light) \
|
||||
#if CC_USE_SHADOW_MAP && CC_NUM_SHADOW_LIGHTS > index \
|
||||
float shadow_##index = 1.0; \
|
||||
vec2 projCoords##index = v_posLightSpace[index].xy / v_posLightSpace[index].w; \
|
||||
vec2 shadowUV##index = projCoords##index * 0.5 + vec2(0.5); /*(-1, 1) => (0, 1)*/ \
|
||||
if (shadowUV##index.x >= 0.0 && shadowUV##index.x <= 1.0 && shadowUV##index.y >= 0.0 && shadowUV##index.y <= 1.0) { \
|
||||
float currentDepth##index = clamp(v_depth[index], 0.0, 1.0); \
|
||||
#if CC_SHADOW_##index##_TYPE == CC_SHADOW_TYPE_SOFT_PCF3X3 \
|
||||
shadow_##index = shadowPCF3X3(cc_shadow_map_##index, shadowUV##index, currentDepth##index, cc_shadow_info[index].w, cc_shadow_info[index].z); \
|
||||
#elif CC_SHADOW_##index##_TYPE == CC_SHADOW_TYPE_SOFT_PCF5X5 \
|
||||
shadow_##index = shadowPCF5X5(cc_shadow_map_##index, shadowUV##index, currentDepth##index, cc_shadow_info[index].w, cc_shadow_info[index].z); \
|
||||
#else \
|
||||
shadow_##index = shadowSimple(cc_shadow_map_##index, shadowUV##index, currentDepth##index, cc_shadow_info[index].w); \
|
||||
#endif \
|
||||
shadow_##index = computeFallOff(shadow_##index, projCoords##index, 0.0); \
|
||||
} \
|
||||
\
|
||||
light.diffuse *= shadow_##index; \
|
||||
light.specular *= shadow_##index; \
|
||||
#endif
|
||||
127
engine/cocos2d/renderer/build/chunks/skinning.inc
Normal file
127
engine/cocos2d/renderer/build/chunks/skinning.inc
Normal file
@@ -0,0 +1,127 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
#if CC_USE_SKINNING
|
||||
|
||||
in vec4 a_weights;
|
||||
in vec4 a_joints;
|
||||
|
||||
#if CC_USE_JOINTS_TEXTRUE
|
||||
uniform SKINNING {
|
||||
vec2 jointsTextureSize;
|
||||
};
|
||||
#pragma builtin(local)
|
||||
uniform sampler2D jointsTexture;
|
||||
|
||||
#if CC_JOINTS_TEXTURE_FLOAT32
|
||||
mat4 getBoneMatrix(const in float i) {
|
||||
float width = jointsTextureSize.x;
|
||||
float height = jointsTextureSize.y;
|
||||
float j = i * 4.0;
|
||||
float x = mod(j, width);
|
||||
float y = floor(j / width);
|
||||
|
||||
float dx = 1.0 / width;
|
||||
float dy = 1.0 / height;
|
||||
|
||||
y = dy * (y + 0.5);
|
||||
|
||||
vec4 v1 = texture(jointsTexture, vec2(dx * (x + 0.5), y));
|
||||
vec4 v2 = texture(jointsTexture, vec2(dx * (x + 1.5), y));
|
||||
vec4 v3 = texture(jointsTexture, vec2(dx * (x + 2.5), y));
|
||||
vec4 v4 = texture(jointsTexture, vec2(dx * (x + 3.5), y));
|
||||
|
||||
return mat4(v1, v2, v3, v4);
|
||||
}
|
||||
#else
|
||||
float decode32(vec4 rgba) {
|
||||
float Sign = 1.0 - step(128.0, rgba[0]) * 2.0;
|
||||
float Exponent = 2.0 * mod(rgba[0], 128.0) + step(128.0, rgba[1]) - 127.0;
|
||||
float Mantissa = mod(rgba[1], 128.0) * 65536.0 + rgba[2] * 256.0 + rgba[3] + 8388608.0;
|
||||
return Sign * exp2(Exponent - 23.0) * Mantissa;
|
||||
}
|
||||
vec4 decodevec4 (vec4 x, vec4 y, vec4 z, vec4 w) {
|
||||
// TODO: check this on big endian devices
|
||||
return vec4(
|
||||
decode32(x.wzyx * 255.0),
|
||||
decode32(y.wzyx * 255.0),
|
||||
decode32(z.wzyx * 255.0),
|
||||
decode32(w.wzyx * 255.0)
|
||||
);
|
||||
}
|
||||
|
||||
vec4 decodevec4 (float dx, float x, float y) {
|
||||
return decodevec4(
|
||||
texture(jointsTexture, vec2(dx * (x + 0.5), y)),
|
||||
texture(jointsTexture, vec2(dx * (x + 1.5), y)),
|
||||
texture(jointsTexture, vec2(dx * (x + 2.5), y)),
|
||||
texture(jointsTexture, vec2(dx * (x + 3.5), y))
|
||||
);
|
||||
}
|
||||
|
||||
mat4 getBoneMatrix(const in float i) {
|
||||
float width = jointsTextureSize.x;
|
||||
float height = jointsTextureSize.y;
|
||||
float j = i * 16.0;
|
||||
float x = mod(j, width);
|
||||
float y = floor(j / width);
|
||||
|
||||
float dx = 1.0 / width;
|
||||
float dy = 1.0 / height;
|
||||
|
||||
y = dy * (y + 0.5);
|
||||
|
||||
vec4 v1 = decodevec4(dx, x, y);
|
||||
vec4 v2 = decodevec4(dx, x+4.0, y);
|
||||
vec4 v3 = decodevec4(dx, x+8.0, y);
|
||||
vec4 v4 = decodevec4(dx, x+12.0, y);
|
||||
|
||||
return mat4(v1, v2, v3, v4);
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
#define CC_JOINT_MATRICES_SIZE 50
|
||||
|
||||
#pragma builtin(local)
|
||||
uniform JOINT_MATRIX {
|
||||
mat4 jointMatrices[CC_JOINT_MATRICES_SIZE];
|
||||
};
|
||||
|
||||
mat4 getBoneMatrix(const in float i) {
|
||||
return jointMatrices[int(i)];
|
||||
}
|
||||
#endif
|
||||
|
||||
mat4 skinMatrix() {
|
||||
return
|
||||
getBoneMatrix(a_joints.x) * a_weights.x +
|
||||
getBoneMatrix(a_joints.y) * a_weights.y +
|
||||
getBoneMatrix(a_joints.z) * a_weights.z +
|
||||
getBoneMatrix(a_joints.w) * a_weights.w
|
||||
;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void SKIN_VERTEX(inout vec4 a1) {
|
||||
#if CC_USE_SKINNING
|
||||
mat4 m = skinMatrix();
|
||||
a1 = m * a1;
|
||||
#endif
|
||||
}
|
||||
|
||||
void SKIN_VERTEX(inout vec4 a1, inout vec4 a2) {
|
||||
#if CC_USE_SKINNING
|
||||
mat4 m = skinMatrix();
|
||||
a1 = m * a1;
|
||||
a2 = m * a2;
|
||||
#endif
|
||||
}
|
||||
|
||||
void SKIN_VERTEX(inout vec4 a1, inout vec4 a2, inout vec4 a3) {
|
||||
#if CC_USE_SKINNING
|
||||
mat4 m = skinMatrix();
|
||||
a1 = m * a1;
|
||||
a2 = m * a2;
|
||||
a3 = m * a3;
|
||||
#endif
|
||||
}
|
||||
27
engine/cocos2d/renderer/build/chunks/texture.inc
Normal file
27
engine/cocos2d/renderer/build/chunks/texture.inc
Normal file
@@ -0,0 +1,27 @@
|
||||
|
||||
#include <gamma>
|
||||
|
||||
#define CCTexture(_texture_, _uv_, _color_) \
|
||||
vec4 _texture_##_tmp = texture(_texture_, _uv_); \
|
||||
#if CC_USE_ALPHA_ATLAS_##_texture_ \
|
||||
_texture_##_tmp.a *= texture(_texture_, _uv_ + vec2(0, 0.5)).r; \
|
||||
#endif \
|
||||
#if INPUT_IS_GAMMA \
|
||||
_color_.rgb *= SRGBToLinear(_texture_##_tmp.rgb); \
|
||||
_color_.a *= _texture_##_tmp.a; \
|
||||
#else \
|
||||
_color_ *= _texture_##_tmp; \
|
||||
#endif \
|
||||
#pragma // empty pragma trick to get rid of trailing semicolons at effect compile time
|
||||
|
||||
#define CCTextureRGB(_texture_, _uv_, _color_) \
|
||||
vec4 _texture_##_tmp = texture(_texture_, _uv_); \
|
||||
#if CC_USE_ALPHA_ATLAS_##_texture_ \
|
||||
_texture_##_tmp.a *= texture(_texture_, _uv_ + vec2(0, 0.5)).r; \
|
||||
#endif \
|
||||
#if INPUT_IS_GAMMA \
|
||||
_color_.rgb *= SRGBToLinear(_texture_##_tmp.rgb); \
|
||||
#else \
|
||||
_color_.rgb *= _texture_##_tmp.rgb; \
|
||||
#endif \
|
||||
#pragma // empty pragma trick to get rid of trailing semicolons at effect compile time
|
||||
170
engine/cocos2d/renderer/build/chunks/transform.inc
Normal file
170
engine/cocos2d/renderer/build/chunks/transform.inc
Normal file
@@ -0,0 +1,170 @@
|
||||
|
||||
vec4 quaternionFromAxisAngle(float angle, vec3 axis){
|
||||
angle /= 2.;
|
||||
float s = sin(angle);
|
||||
vec4 res;
|
||||
res.xyz = s * axis;
|
||||
res.w = cos(angle);
|
||||
return res;
|
||||
}
|
||||
|
||||
vec4 quaternionFromAxis(vec3 xAxis,vec3 yAxis,vec3 zAxis){
|
||||
mat3 m = mat3(xAxis,yAxis,zAxis);
|
||||
float trace = m[0][0] + m[1][1] + m[2][2];
|
||||
vec4 quat;
|
||||
|
||||
if (trace > 0.) {
|
||||
float s = 0.5 / sqrt(trace + 1.0);
|
||||
quat.w = 0.25 / s;
|
||||
quat.x = (m[2][1] - m[1][2]) * s;
|
||||
quat.y = (m[0][2] - m[2][0]) * s;
|
||||
quat.z = (m[1][0] - m[0][1]) * s;
|
||||
} else if ((m[0][0] > m[1][1]) && (m[0][0] > m[2][2])) {
|
||||
float s = 2.0 * sqrt(1.0 + m[0][0] - m[1][1] - m[2][2]);
|
||||
quat.w = (m[2][1] - m[1][2]) / s;
|
||||
quat.x = 0.25 * s;
|
||||
quat.y = (m[0][1] + m[1][0]) / s;
|
||||
quat.z = (m[0][2] + m[2][0]) / s;
|
||||
} else if (m[1][1] > m[2][2]) {
|
||||
float s = 2.0 * sqrt(1.0 + m[1][1] - m[0][0] - m[2][2]);
|
||||
quat.w = (m[0][2] - m[2][0]) / s;
|
||||
quat.x = (m[0][1] + m[1][0]) / s;
|
||||
quat.y = 0.25 * s;
|
||||
quat.z = (m[1][2] + m[2][1]) / s;
|
||||
} else {
|
||||
float s = 2.0 * sqrt(1.0 + m[2][2] - m[0][0] - m[1][1]);
|
||||
quat.w = (m[1][0] - m[0][1]) / s;
|
||||
quat.x = (m[0][2] + m[2][0]) / s;
|
||||
quat.y = (m[1][2] + m[2][1]) / s;
|
||||
quat.z = 0.25 * s;
|
||||
}
|
||||
|
||||
float len = quat.x * quat.x + quat.y * quat.y + quat.z * quat.z + quat.w * quat.w;
|
||||
if (len > 0.) {
|
||||
len = 1. / sqrt(len);
|
||||
quat.x = quat.x * len;
|
||||
quat.y = quat.y * len;
|
||||
quat.z = quat.z * len;
|
||||
quat.w = quat.w * len;
|
||||
}
|
||||
|
||||
return quat;
|
||||
}
|
||||
|
||||
vec4 quaternionFromEuler(vec3 angle){
|
||||
float x = angle.x / 2.;
|
||||
float y = angle.y / 2.;
|
||||
float z = angle.z / 2.;
|
||||
|
||||
float sx = sin(x);
|
||||
float cx = cos(x);
|
||||
float sy = sin(y);
|
||||
float cy = cos(y);
|
||||
float sz = sin(z);
|
||||
float cz = cos(z);
|
||||
|
||||
vec4 quat = vec4(0);
|
||||
|
||||
quat.x = sx * cy * cz + cx * sy * sz;
|
||||
quat.y = cx * sy * cz + sx * cy * sz;
|
||||
quat.z = cx * cy * sz - sx * sy * cz;
|
||||
quat.w = cx * cy * cz - sx * sy * sz;
|
||||
|
||||
return quat;
|
||||
}
|
||||
|
||||
mat4 matrixFromRT(vec4 q, vec3 p){
|
||||
float x2 = q.x + q.x;
|
||||
float y2 = q.y + q.y;
|
||||
float z2 = q.z + q.z;
|
||||
float xx = q.x * x2;
|
||||
float xy = q.x * y2;
|
||||
float xz = q.x * z2;
|
||||
float yy = q.y * y2;
|
||||
float yz = q.y * z2;
|
||||
float zz = q.z * z2;
|
||||
float wx = q.w * x2;
|
||||
float wy = q.w * y2;
|
||||
float wz = q.w * z2;
|
||||
|
||||
return mat4(
|
||||
1. - (yy + zz), xy + wz, xz - wy, 0,
|
||||
xy - wz, 1. - (xx + zz), yz + wx, 0,
|
||||
xz + wy, yz - wx, 1. - (xx + yy), 0,
|
||||
p.x, p.y, p.z, 1
|
||||
);
|
||||
}
|
||||
|
||||
mat4 matFromRTS(vec4 q, vec3 t, vec3 s){
|
||||
float x = q.x, y = q.y, z = q.z, w = q.w;
|
||||
float x2 = x + x;
|
||||
float y2 = y + y;
|
||||
float z2 = z + z;
|
||||
|
||||
float xx = x * x2;
|
||||
float xy = x * y2;
|
||||
float xz = x * z2;
|
||||
float yy = y * y2;
|
||||
float yz = y * z2;
|
||||
float zz = z * z2;
|
||||
float wx = w * x2;
|
||||
float wy = w * y2;
|
||||
float wz = w * z2;
|
||||
float sx = s.x;
|
||||
float sy = s.y;
|
||||
float sz = s.z;
|
||||
|
||||
return mat4((1. - (yy + zz)) * sx, (xy + wz) * sx, (xz - wy) * sx, 0,
|
||||
(xy - wz) * sy, (1. - (xx + zz)) * sy, (yz + wx) * sy, 0,
|
||||
(xz + wy) * sz, (yz - wx) * sz, (1. - (xx + yy)) * sz, 0,
|
||||
t.x, t.y, t.z, 1);
|
||||
}
|
||||
|
||||
void scaleMatrix(inout mat4 m, float s){
|
||||
m[0].xyz *= s;
|
||||
m[1].xyz *= s;
|
||||
m[2].xyz *= s;
|
||||
}
|
||||
|
||||
vec4 quatMultiply(vec4 a, vec4 b){
|
||||
vec4 quat;
|
||||
quat.x = a.x * b.w + a.w * b.x + a.y * b.z - a.z * b.y;
|
||||
quat.y = a.y * b.w + a.w * b.y + a.z * b.x - a.x * b.z;
|
||||
quat.z = a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x;
|
||||
quat.w = a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z;
|
||||
return quat;
|
||||
}
|
||||
|
||||
void rotateVecFromQuat(inout vec3 v, vec4 q){
|
||||
float ix = q.w * v.x + q.y * v.z - q.z * v.y;
|
||||
float iy = q.w * v.y + q.z * v.x - q.x * v.z;
|
||||
float iz = q.w * v.z + q.x * v.y - q.y * v.x;
|
||||
float iw = -q.x * v.x - q.y * v.y - q.z * v.z;
|
||||
|
||||
// calculate result * inverse quat
|
||||
v.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y;
|
||||
v.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z;
|
||||
v.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x;
|
||||
}
|
||||
|
||||
vec3 rotateVecFromAxis(vec3 v, vec3 axis, float theta){
|
||||
return cos(theta) * v + sin(theta) * cross(v, axis) + (1. - cos(theta)) * dot(v, axis) * axis;
|
||||
}
|
||||
|
||||
vec3 rotateInLocalSpace(vec3 pos, vec3 xAxis, vec3 yAxis, vec3 zAxis, vec4 q){
|
||||
float z = pos.z;
|
||||
float x = pos.x;
|
||||
float y = pos.y;
|
||||
vec4 viewQuat = quaternionFromAxis(xAxis, yAxis, zAxis);
|
||||
vec4 rotQuat = quatMultiply(viewQuat, q);
|
||||
rotateVecFromQuat(pos, rotQuat);
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
||||
void rotateCorner(inout vec2 corner, float angle){
|
||||
float xOS = cos(angle) * corner.x - sin(angle) * corner.y;
|
||||
float yOS = sin(angle) * corner.x + cos(angle) * corner.y;
|
||||
corner.x = xOS;
|
||||
corner.y = yOS;
|
||||
}
|
||||
9
engine/cocos2d/renderer/build/chunks/unpack.inc
Normal file
9
engine/cocos2d/renderer/build/chunks/unpack.inc
Normal file
@@ -0,0 +1,9 @@
|
||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||
|
||||
vec3 unpackNormal(vec4 nmap) {
|
||||
return nmap.xyz * 2.0 - 1.0;
|
||||
}
|
||||
|
||||
vec3 unpackRGBE(vec4 rgbe) {
|
||||
return rgbe.rgb * pow(2.0, rgbe.a * 255.0 - 128.0);
|
||||
}
|
||||
805
engine/cocos2d/renderer/build/mappings/gfx/define.ts
Normal file
805
engine/cocos2d/renderer/build/mappings/gfx/define.ts
Normal file
@@ -0,0 +1,805 @@
|
||||
// Extensions
|
||||
export enum WebGLEXT {
|
||||
COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0,
|
||||
COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1,
|
||||
COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2,
|
||||
COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3,
|
||||
|
||||
COMPRESSED_SRGB_S3TC_DXT1_EXT = 0x8C4C,
|
||||
COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 0x8C4D,
|
||||
COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 0x8C4E,
|
||||
COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 0x8C4F,
|
||||
|
||||
COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00,
|
||||
COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01,
|
||||
COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02,
|
||||
COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03,
|
||||
|
||||
COMPRESSED_RGB_ETC1_WEBGL = 0x8D64,
|
||||
}
|
||||
|
||||
export const GFX_MAX_VERTEX_ATTRIBUTES: number = 16;
|
||||
export const GFX_MAX_TEXTURE_UNITS: number = 16;
|
||||
export const GFX_MAX_ATTACHMENTS: number = 4;
|
||||
export const GFX_MAX_BUFFER_BINDINGS: number = 24;
|
||||
|
||||
export enum GFXObjectType {
|
||||
UNKNOWN,
|
||||
BUFFER,
|
||||
TEXTURE,
|
||||
TEXTURE_VIEW,
|
||||
RENDER_PASS,
|
||||
FRAMEBUFFER,
|
||||
SAMPLER,
|
||||
SHADER,
|
||||
PIPELINE_LAYOUT,
|
||||
PIPELINE_STATE,
|
||||
BINDING_LAYOUT,
|
||||
INPUT_ASSEMBLER,
|
||||
COMMAND_ALLOCATOR,
|
||||
COMMAND_BUFFER,
|
||||
QUEUE,
|
||||
WINDOW,
|
||||
}
|
||||
|
||||
export enum GFXStatus {
|
||||
UNREADY,
|
||||
FAILED,
|
||||
SUCCESS,
|
||||
}
|
||||
|
||||
export class GFXObject {
|
||||
|
||||
public get gfxType (): GFXObjectType {
|
||||
return this._gfxType;
|
||||
}
|
||||
|
||||
public get status (): GFXStatus {
|
||||
return this._status;
|
||||
}
|
||||
|
||||
protected _gfxType = GFXObjectType.UNKNOWN;
|
||||
protected _status = GFXStatus.UNREADY;
|
||||
|
||||
constructor (gfxType: GFXObjectType) {
|
||||
this._gfxType = gfxType;
|
||||
}
|
||||
}
|
||||
|
||||
export enum GFXAttributeName {
|
||||
ATTR_POSITION = 'a_position',
|
||||
ATTR_NORMAL = 'a_normal',
|
||||
ATTR_TANGENT = 'a_tangent',
|
||||
ATTR_BITANGENT = 'a_bitangent',
|
||||
ATTR_WEIGHTS = 'a_weights',
|
||||
ATTR_JOINTS = 'a_joints',
|
||||
ATTR_COLOR = 'a_color',
|
||||
ATTR_COLOR1 = 'a_color1',
|
||||
ATTR_COLOR2 = 'a_color2',
|
||||
ATTR_TEX_COORD = 'a_texCoord',
|
||||
ATTR_TEX_COORD1 = 'a_texCoord1',
|
||||
ATTR_TEX_COORD2 = 'a_texCoord2',
|
||||
ATTR_TEX_COORD3 = 'a_texCoord3',
|
||||
ATTR_TEX_COORD4 = 'a_texCoord4',
|
||||
ATTR_TEX_COORD5 = 'a_texCoord5',
|
||||
ATTR_TEX_COORD6 = 'a_texCoord6',
|
||||
ATTR_TEX_COORD7 = 'a_texCoord7',
|
||||
ATTR_TEX_COORD8 = 'a_texCoord8',
|
||||
}
|
||||
|
||||
export enum GFXType {
|
||||
UNKNOWN,
|
||||
BOOL,
|
||||
BOOL2,
|
||||
BOOL3,
|
||||
BOOL4,
|
||||
INT,
|
||||
INT2,
|
||||
INT3,
|
||||
INT4,
|
||||
UINT,
|
||||
UINT2,
|
||||
UINT3,
|
||||
UINT4,
|
||||
FLOAT,
|
||||
FLOAT2,
|
||||
FLOAT3,
|
||||
FLOAT4,
|
||||
COLOR4,
|
||||
MAT2,
|
||||
MAT2X3,
|
||||
MAT2X4,
|
||||
MAT3X2,
|
||||
MAT3,
|
||||
MAT3X4,
|
||||
MAT4X2,
|
||||
MAT4X3,
|
||||
MAT4,
|
||||
SAMPLER1D,
|
||||
SAMPLER1D_ARRAY,
|
||||
SAMPLER2D,
|
||||
SAMPLER2D_ARRAY,
|
||||
SAMPLER3D,
|
||||
SAMPLER_CUBE,
|
||||
COUNT,
|
||||
}
|
||||
|
||||
export enum GFXFormat {
|
||||
|
||||
UNKNOWN,
|
||||
|
||||
A8,
|
||||
L8,
|
||||
LA8,
|
||||
|
||||
R8,
|
||||
R8SN,
|
||||
R8UI,
|
||||
R8I,
|
||||
R16F,
|
||||
R16UI,
|
||||
R16I,
|
||||
R32F,
|
||||
R32UI,
|
||||
R32I,
|
||||
|
||||
RG8,
|
||||
RG8SN,
|
||||
RG8UI,
|
||||
RG8I,
|
||||
RG16F,
|
||||
RG16UI,
|
||||
RG16I,
|
||||
RG32F,
|
||||
RG32UI,
|
||||
RG32I,
|
||||
|
||||
RGB8,
|
||||
SRGB8,
|
||||
RGB8SN,
|
||||
RGB8UI,
|
||||
RGB8I,
|
||||
RGB16F,
|
||||
RGB16UI,
|
||||
RGB16I,
|
||||
RGB32F,
|
||||
RGB32UI,
|
||||
RGB32I,
|
||||
|
||||
RGBA8,
|
||||
SRGB8_A8,
|
||||
RGBA8SN,
|
||||
RGBA8UI,
|
||||
RGBA8I,
|
||||
RGBA16F,
|
||||
RGBA16UI,
|
||||
RGBA16I,
|
||||
RGBA32F,
|
||||
RGBA32UI,
|
||||
RGBA32I,
|
||||
|
||||
// Special Format
|
||||
R5G6B5,
|
||||
R11G11B10F,
|
||||
RGB5A1,
|
||||
RGBA4,
|
||||
RGB10A2,
|
||||
RGB10A2UI,
|
||||
RGB9E5,
|
||||
|
||||
// Depth-Stencil Format
|
||||
D16,
|
||||
D16S8,
|
||||
D24,
|
||||
D24S8,
|
||||
D32F,
|
||||
D32F_S8,
|
||||
|
||||
// Compressed Format
|
||||
|
||||
// Block Compression Format, DDS (DirectDraw Surface)
|
||||
// DXT1: 3 channels (5:6:5), 1/8 origianl size, with 0 or 1 bit of alpha
|
||||
BC1,
|
||||
BC1_ALPHA,
|
||||
BC1_SRGB,
|
||||
BC1_SRGB_ALPHA,
|
||||
// DXT3: 4 channels (5:6:5), 1/4 origianl size, with 4 bits of alpha
|
||||
BC2,
|
||||
BC2_SRGB,
|
||||
// DXT5: 4 channels (5:6:5), 1/4 origianl size, with 8 bits of alpha
|
||||
BC3,
|
||||
BC3_SRGB,
|
||||
// 1 channel (8), 1/4 origianl size
|
||||
BC4,
|
||||
BC4_SNORM,
|
||||
// 2 channels (8:8), 1/2 origianl size
|
||||
BC5,
|
||||
BC5_SNORM,
|
||||
// 3 channels (16:16:16), half-floating point, 1/6 origianl size
|
||||
// UF16: unsigned float, 5 exponent bits + 11 mantissa bits
|
||||
// SF16: signed float, 1 signed bit + 5 exponent bits + 10 mantissa bits
|
||||
BC6H_UF16,
|
||||
BC6H_SF16,
|
||||
// 4 channels (4~7 bits per channel) with 0 to 8 bits of alpha, 1/3 original size
|
||||
BC7,
|
||||
BC7_SRGB,
|
||||
|
||||
// Ericsson Texture Compression Format
|
||||
ETC_RGB8,
|
||||
ETC2_RGB8,
|
||||
ETC2_SRGB8,
|
||||
ETC2_RGB8_A1,
|
||||
ETC2_SRGB8_A1,
|
||||
ETC2_RGBA8,
|
||||
ETC2_SRGB8_A8,
|
||||
EAC_R11,
|
||||
EAC_R11SN,
|
||||
EAC_RG11,
|
||||
EAC_RG11SN,
|
||||
|
||||
// PVRTC (PowerVR)
|
||||
PVRTC_RGB2,
|
||||
PVRTC_RGBA2,
|
||||
PVRTC_RGB4,
|
||||
PVRTC_RGBA4,
|
||||
PVRTC2_2BPP,
|
||||
PVRTC2_4BPP,
|
||||
}
|
||||
|
||||
export enum GFXBufferUsageBit {
|
||||
NONE = 0,
|
||||
TRANSFER_SRC = 0x1,
|
||||
TRANSFER_DST = 0x2,
|
||||
INDEX = 0x4,
|
||||
VERTEX = 0x8,
|
||||
UNIFORM = 0x10,
|
||||
STORAGE = 0x20,
|
||||
INDIRECT = 0x40,
|
||||
}
|
||||
|
||||
export type GFXBufferUsage = GFXBufferUsageBit;
|
||||
|
||||
export enum GFXMemoryUsageBit {
|
||||
NONE = 0,
|
||||
DEVICE = 0x1,
|
||||
HOST = 0x2,
|
||||
}
|
||||
|
||||
export type GFXMemoryUsage = GFXMemoryUsageBit;
|
||||
|
||||
export enum GFXBufferAccessBit {
|
||||
NONE = 0,
|
||||
READ = 0x1,
|
||||
WRITE = 0x2,
|
||||
}
|
||||
|
||||
export type GFXBufferAccess = GFXBufferAccessBit;
|
||||
|
||||
export enum GFXPrimitiveMode {
|
||||
POINT_LIST,
|
||||
LINE_LIST,
|
||||
LINE_STRIP,
|
||||
LINE_LOOP,
|
||||
LINE_LIST_ADJACENCY,
|
||||
LINE_STRIP_ADJACENCY,
|
||||
ISO_LINE_LIST,
|
||||
// raycast detectable:
|
||||
TRIANGLE_LIST,
|
||||
TRIANGLE_STRIP,
|
||||
TRIANGLE_FAN,
|
||||
TRIANGLE_LIST_ADJACENCY,
|
||||
TRIANGLE_STRIP_ADJACENCY,
|
||||
TRIANGLE_PATCH_ADJACENCY,
|
||||
QUAD_PATCH_LIST,
|
||||
}
|
||||
|
||||
export enum GFXPolygonMode {
|
||||
FILL,
|
||||
POINT,
|
||||
LINE,
|
||||
}
|
||||
|
||||
export enum GFXShadeModel {
|
||||
GOURAND,
|
||||
FLAT,
|
||||
}
|
||||
|
||||
export enum GFXCullMode {
|
||||
NONE,
|
||||
FRONT,
|
||||
BACK,
|
||||
}
|
||||
|
||||
export enum GFXComparisonFunc {
|
||||
NEVER,
|
||||
LESS,
|
||||
EQUAL,
|
||||
LESS_EQUAL,
|
||||
GREATER,
|
||||
NOT_EQUAL,
|
||||
GREATER_EQUAL,
|
||||
ALWAYS,
|
||||
}
|
||||
|
||||
export enum GFXStencilOp {
|
||||
ZERO,
|
||||
KEEP,
|
||||
REPLACE,
|
||||
INCR,
|
||||
DECR,
|
||||
INVERT,
|
||||
INCR_WRAP,
|
||||
DECR_WRAP,
|
||||
}
|
||||
|
||||
export enum GFXBlendOp {
|
||||
ADD,
|
||||
SUB,
|
||||
REV_SUB,
|
||||
MIN,
|
||||
MAX,
|
||||
}
|
||||
|
||||
export enum GFXBlendFactor {
|
||||
ZERO,
|
||||
ONE,
|
||||
SRC_ALPHA,
|
||||
DST_ALPHA,
|
||||
ONE_MINUS_SRC_ALPHA,
|
||||
ONE_MINUS_DST_ALPHA,
|
||||
SRC_COLOR,
|
||||
DST_COLOR,
|
||||
ONE_MINUS_SRC_COLOR,
|
||||
ONE_MINUS_DST_COLOR,
|
||||
SRC_ALPHA_SATURATE,
|
||||
CONSTANT_COLOR,
|
||||
ONE_MINUS_CONSTANT_COLOR,
|
||||
CONSTANT_ALPHA,
|
||||
ONE_MINUS_CONSTANT_ALPHA,
|
||||
}
|
||||
|
||||
export enum GFXColorMask {
|
||||
NONE = 0x0,
|
||||
R = 0x1,
|
||||
G = 0x2,
|
||||
B = 0x4,
|
||||
A = 0x8,
|
||||
ALL = R | G | B | A,
|
||||
}
|
||||
|
||||
export enum GFXFilter {
|
||||
NONE,
|
||||
POINT,
|
||||
LINEAR,
|
||||
ANISOTROPIC,
|
||||
}
|
||||
|
||||
export enum GFXAddress {
|
||||
WRAP,
|
||||
MIRROR,
|
||||
CLAMP,
|
||||
BORDER,
|
||||
}
|
||||
|
||||
export enum GFXTextureType {
|
||||
TEX1D,
|
||||
TEX2D,
|
||||
TEX3D,
|
||||
}
|
||||
|
||||
export enum GFXTextureUsageBit {
|
||||
NONE = 0,
|
||||
TRANSFER_SRC = 0x1,
|
||||
TRANSFER_DST = 0x2,
|
||||
SAMPLED = 0x4,
|
||||
STORAGE = 0x8,
|
||||
COLOR_ATTACHMENT = 0x10,
|
||||
DEPTH_STENCIL_ATTACHMENT = 0x20,
|
||||
TRANSIENT_ATTACHMENT = 0x40,
|
||||
INPUT_ATTACHMENT = 0x80,
|
||||
}
|
||||
|
||||
export type GFXTextureUsage = GFXTextureUsageBit;
|
||||
|
||||
export enum GFXSampleCount {
|
||||
X1,
|
||||
X2,
|
||||
X4,
|
||||
X8,
|
||||
X16,
|
||||
X32,
|
||||
X64,
|
||||
}
|
||||
|
||||
export enum GFXTextureFlagBit {
|
||||
NONE = 0,
|
||||
GEN_MIPMAP = 0x1,
|
||||
CUBEMAP = 0x2,
|
||||
BAKUP_BUFFER = 0x4,
|
||||
}
|
||||
|
||||
export type GFXTextureFlags = GFXTextureFlagBit;
|
||||
|
||||
export enum GFXTextureViewType {
|
||||
TV1D,
|
||||
TV2D,
|
||||
TV3D,
|
||||
CUBE,
|
||||
TV1D_ARRAY,
|
||||
TV2D_ARRAY,
|
||||
}
|
||||
|
||||
export enum GFXShaderType {
|
||||
VERTEX,
|
||||
HULL,
|
||||
DOMAIN,
|
||||
GEOMETRY,
|
||||
FRAGMENT,
|
||||
COMPUTE,
|
||||
COUNT,
|
||||
}
|
||||
|
||||
export enum GFXBindingType {
|
||||
UNKNOWN,
|
||||
UNIFORM_BUFFER,
|
||||
SAMPLER,
|
||||
STORAGE_BUFFER,
|
||||
}
|
||||
|
||||
export enum GFXCommandBufferType {
|
||||
PRIMARY,
|
||||
SECONDARY,
|
||||
}
|
||||
|
||||
// Enumeration all possible values of operations to be performed on initially Loading a Framebuffer Object.
|
||||
export enum GFXLoadOp {
|
||||
LOAD, // Load the contents from the fbo from previous
|
||||
CLEAR, // Clear the fbo
|
||||
DISCARD, // Ignore writing to the fbo and keep old data
|
||||
}
|
||||
|
||||
// Enumerates all possible values of operations to be performed when Storing to a Framebuffer Object.
|
||||
export enum GFXStoreOp {
|
||||
STORE, // Write the source to the destination
|
||||
DISCARD, // Don't write the source to the destination
|
||||
}
|
||||
|
||||
export enum GFXTextureLayout {
|
||||
UNDEFINED,
|
||||
GENERAL,
|
||||
COLOR_ATTACHMENT_OPTIMAL,
|
||||
DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
|
||||
DEPTH_STENCIL_READONLY_OPTIMAL,
|
||||
SHADER_READONLY_OPTIMAL,
|
||||
TRANSFER_SRC_OPTIMAL,
|
||||
TRANSFER_DST_OPTIMAL,
|
||||
PREINITIALIZED,
|
||||
PRESENT_SRC,
|
||||
}
|
||||
|
||||
export enum GFXPipelineBindPoint {
|
||||
GRAPHICS,
|
||||
COMPUTE,
|
||||
RAY_TRACING,
|
||||
}
|
||||
|
||||
export enum GFXDynamicState {
|
||||
VIEWPORT,
|
||||
SCISSOR,
|
||||
LINE_WIDTH,
|
||||
DEPTH_BIAS,
|
||||
BLEND_CONSTANTS,
|
||||
DEPTH_BOUNDS,
|
||||
STENCIL_WRITE_MASK,
|
||||
STENCIL_COMPARE_MASK,
|
||||
}
|
||||
|
||||
export enum GFXStencilFace {
|
||||
FRONT,
|
||||
BACK,
|
||||
ALL,
|
||||
}
|
||||
|
||||
export enum GFXQueueType {
|
||||
GRAPHICS,
|
||||
COMPUTE,
|
||||
TRANSFER,
|
||||
}
|
||||
|
||||
// Interfaces
|
||||
|
||||
export interface IGFXRect {
|
||||
x: number;
|
||||
y: number;
|
||||
width: number;
|
||||
height: number;
|
||||
}
|
||||
|
||||
export interface IGFXViewport {
|
||||
left: number;
|
||||
top: number;
|
||||
width: number;
|
||||
height: number;
|
||||
minDepth: number;
|
||||
maxDepth: number;
|
||||
}
|
||||
|
||||
export interface IGFXColor {
|
||||
r: number;
|
||||
g: number;
|
||||
b: number;
|
||||
a: number;
|
||||
}
|
||||
|
||||
export enum GFXClearFlag {
|
||||
NONE = 0,
|
||||
COLOR = 1,
|
||||
DEPTH = 2,
|
||||
STENCIL = 4,
|
||||
DEPTH_STENCIL = DEPTH | STENCIL,
|
||||
ALL = COLOR | DEPTH | STENCIL,
|
||||
}
|
||||
|
||||
export interface IGFXOffset {
|
||||
x: number;
|
||||
y: number;
|
||||
z: number;
|
||||
}
|
||||
|
||||
export interface IGFXExtent {
|
||||
width: number;
|
||||
height: number;
|
||||
depth: number;
|
||||
}
|
||||
|
||||
export class GFXTextureSubres {
|
||||
public baseMipLevel: number = 0;
|
||||
public levelCount: number = 1;
|
||||
public baseArrayLayer: number = 0;
|
||||
public layerCount: number = 1;
|
||||
}
|
||||
|
||||
export class GFXTextureCopy {
|
||||
public srcSubres: GFXTextureSubres = new GFXTextureSubres();
|
||||
public srcOffset: IGFXOffset = { x: 0, y: 0, z: 0 };
|
||||
public dstSubres: GFXTextureSubres = new GFXTextureSubres();
|
||||
public dstOffset: IGFXOffset = { x: 0, y: 0, z: 0 };
|
||||
public extent: IGFXExtent = { width: 0, height: 0, depth: 0 };
|
||||
}
|
||||
|
||||
export class GFXBufferTextureCopy {
|
||||
public buffOffset: number = 0;
|
||||
public buffStride: number = 0;
|
||||
public buffTexHeight: number = 0;
|
||||
public texOffset: IGFXOffset = { x: 0, y: 0, z: 0 };
|
||||
public texExtent: IGFXExtent = { width: 0, height: 0, depth: 0 };
|
||||
public texSubres: GFXTextureSubres = new GFXTextureSubres();
|
||||
}
|
||||
|
||||
export interface IGFXFormatInfo {
|
||||
readonly name: string;
|
||||
readonly size: number;
|
||||
readonly count: number;
|
||||
readonly isFloating: boolean;
|
||||
readonly hasAlpha: boolean;
|
||||
readonly hasDepth: boolean;
|
||||
readonly hasStencil: boolean;
|
||||
readonly isCompressed: boolean;
|
||||
}
|
||||
|
||||
// tslint:disable: max-line-length
|
||||
export const GFXFormatInfos: IGFXFormatInfo[] = [
|
||||
|
||||
{ name: 'UNKNOWN', size: 0, count: 0, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
|
||||
{ name: 'A8', size: 1, count: 1, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'L8', size: 1, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'LA8', size: 1, count: 2, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
|
||||
{ name: 'R8', size: 1, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'R8SN', size: 1, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'R8UI', size: 1, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'R8I', size: 1, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'R16F', size: 2, count: 1, isFloating: true, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'R16UI', size: 2, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'R16I', size: 2, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'R32F', size: 4, count: 1, isFloating: true, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'R32UI', size: 4, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'R32I', size: 4, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
|
||||
{ name: 'RG8', size: 2, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RG8SN', size: 2, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RG8UI', size: 2, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RG8I', size: 2, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RG16F', size: 4, count: 2, isFloating: true, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RG16UI', size: 4, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RG16I', size: 4, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RG32F', size: 8, count: 2, isFloating: true, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RG32UI', size: 8, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RG32I', size: 8, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
|
||||
{ name: 'RGB8', size: 3, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'SRGB8', size: 3, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB8SN', size: 3, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB8UI', size: 3, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB8I', size: 3, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB16F', size: 6, count: 3, isFloating: true, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB16UI', size: 6, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB16I', size: 6, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB32F', size: 12, count: 3, isFloating: true, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB32UI', size: 12, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB32I', size: 12, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
|
||||
{ name: 'RGBA8', size: 4, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'SRGB8_A8', size: 4, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGBA8SN', size: 4, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGBA8UI', size: 4, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGBA8I', size: 4, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGBA16F', size: 8, count: 4, isFloating: true, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGBA16UI', size: 8, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGBA16I', size: 8, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGBA32F', size: 16, count: 4, isFloating: true, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGBA32UI', size: 16, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGBA32I', size: 16, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
|
||||
{ name: 'R5G6B5', size: 2, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'R11G11B10F', size: 4, count: 3, isFloating: true, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB5A1', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGBA4', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB10A2', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB10A2UI', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
{ name: 'RGB9E5', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: false },
|
||||
|
||||
{ name: 'D16', size: 2, count: 1, isFloating: false, hasAlpha: false, hasDepth: true, hasStencil: false, isCompressed: false },
|
||||
{ name: 'D16S8', size: 3, count: 2, isFloating: false, hasAlpha: false, hasDepth: true, hasStencil: true, isCompressed: false },
|
||||
{ name: 'D24', size: 3, count: 1, isFloating: false, hasAlpha: false, hasDepth: true, hasStencil: false, isCompressed: false },
|
||||
{ name: 'D24S8', size: 4, count: 2, isFloating: false, hasAlpha: false, hasDepth: true, hasStencil: true, isCompressed: false },
|
||||
{ name: 'D32F', size: 4, count: 1, isFloating: true, hasAlpha: false, hasDepth: true, hasStencil: false, isCompressed: false },
|
||||
{ name: 'D32FS8', size: 5, count: 2, isFloating: true, hasAlpha: false, hasDepth: true, hasStencil: true, isCompressed: false },
|
||||
|
||||
{ name: 'BC1', size: 1, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC1_ALPHA', size: 1, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC1_SRGB', size: 1, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC1_SRGB_ALPHA', size: 1, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC2', size: 1, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC2_SRGB', size: 1, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC3', size: 1, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC3_SRGB', size: 1, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC4', size: 1, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC4_SNORM', size: 1, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC5', size: 1, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC5_SNORM', size: 1, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC6H_UF16', size: 1, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC6H_SF16', size: 1, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC7', size: 1, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'BC7_SRGB', size: 1, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
|
||||
{ name: 'ETC_RGB8', size: 1, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'ETC2_RGB8', size: 1, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'ETC2_SRGB8', size: 1, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'ETC2_RGB8_A1', size: 1, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'ETC2_SRGB8_A1', size: 1, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'ETC2_RGBA8', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'ETC2_SRGB8_A8', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'EAC_R11', size: 1, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'EAC_R11SN', size: 1, count: 1, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'EAC_RG11', size: 2, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'EAC_RG11SN', size: 2, count: 2, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
|
||||
{ name: 'PVRTC_RGB2', size: 2, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'PVRTC_RGBA2', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'PVRTC_RGB4', size: 2, count: 3, isFloating: false, hasAlpha: false, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'PVRTC_RGBA4', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'PVRTC2_2BPP', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
{ name: 'PVRTC2_4BPP', size: 2, count: 4, isFloating: false, hasAlpha: true, hasDepth: false, hasStencil: false, isCompressed: true },
|
||||
];
|
||||
// tslint:enable: max-line-length
|
||||
|
||||
export function GFXFormatSize (format: GFXFormat, width: number, height: number, depth: number): number {
|
||||
|
||||
if (!GFXFormatInfos[format].isCompressed) {
|
||||
return (width * height * depth * GFXFormatInfos[format].size);
|
||||
} else {
|
||||
switch (format) {
|
||||
case GFXFormat.BC1:
|
||||
case GFXFormat.BC1_ALPHA:
|
||||
case GFXFormat.BC1_SRGB:
|
||||
case GFXFormat.BC1_SRGB_ALPHA:
|
||||
return Math.ceil(width / 4) * Math.ceil(height / 4) * 8 * depth;
|
||||
case GFXFormat.BC2:
|
||||
case GFXFormat.BC2_SRGB:
|
||||
case GFXFormat.BC3:
|
||||
case GFXFormat.BC3_SRGB:
|
||||
case GFXFormat.BC4:
|
||||
case GFXFormat.BC4_SNORM:
|
||||
case GFXFormat.BC6H_SF16:
|
||||
case GFXFormat.BC6H_UF16:
|
||||
case GFXFormat.BC7:
|
||||
case GFXFormat.BC7_SRGB:
|
||||
return Math.ceil(width / 4) * Math.ceil(height / 4) * 16 * depth;
|
||||
case GFXFormat.BC5:
|
||||
case GFXFormat.BC5_SNORM:
|
||||
return Math.ceil(width / 4) * Math.ceil(height / 4) * 32 * depth;
|
||||
|
||||
case GFXFormat.ETC_RGB8:
|
||||
case GFXFormat.ETC2_RGB8:
|
||||
case GFXFormat.ETC2_SRGB8:
|
||||
case GFXFormat.ETC2_RGB8_A1:
|
||||
case GFXFormat.ETC2_SRGB8_A1:
|
||||
case GFXFormat.EAC_R11:
|
||||
case GFXFormat.EAC_R11SN:
|
||||
return Math.ceil(width / 4) * Math.ceil(height / 4) * 8 * depth;
|
||||
case GFXFormat.EAC_RG11:
|
||||
case GFXFormat.EAC_RG11SN:
|
||||
return Math.ceil(width / 4) * Math.ceil(height / 4) * 16 * depth;
|
||||
|
||||
case GFXFormat.PVRTC_RGB2:
|
||||
case GFXFormat.PVRTC_RGBA2:
|
||||
case GFXFormat.PVRTC2_2BPP:
|
||||
return Math.ceil(Math.max(width, 16) * Math.max(height, 8) / 4) * depth;
|
||||
case GFXFormat.PVRTC_RGB4:
|
||||
case GFXFormat.PVRTC_RGBA4:
|
||||
case GFXFormat.PVRTC2_4BPP:
|
||||
return Math.ceil(Math.max(width, 16) * Math.max(height, 8) / 2) * depth;
|
||||
|
||||
default: {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function GFXFormatSurfaceSize (
|
||||
format: GFXFormat, width: number, height: number,
|
||||
depth: number, mips: number): number {
|
||||
|
||||
let size = 0;
|
||||
|
||||
for (let i = 0; i < mips; ++i) {
|
||||
size += GFXFormatSize(format, width, height, depth);
|
||||
width = Math.max(width >> 1, 1);
|
||||
height = Math.max(height >> 1, 1);
|
||||
depth = Math.max(depth >> 1, 1);
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
export function GFXGetTypeSize (type: GFXType): number {
|
||||
switch (type) {
|
||||
case GFXType.BOOL:
|
||||
case GFXType.INT:
|
||||
case GFXType.UINT:
|
||||
case GFXType.FLOAT: return 4;
|
||||
case GFXType.BOOL2:
|
||||
case GFXType.INT2:
|
||||
case GFXType.UINT2:
|
||||
case GFXType.FLOAT2: return 8;
|
||||
case GFXType.BOOL3:
|
||||
case GFXType.INT3:
|
||||
case GFXType.UINT3:
|
||||
case GFXType.FLOAT3: return 12;
|
||||
case GFXType.BOOL4:
|
||||
case GFXType.INT4:
|
||||
case GFXType.UINT4:
|
||||
case GFXType.FLOAT4:
|
||||
case GFXType.MAT2: return 16;
|
||||
case GFXType.MAT2X3: return 24;
|
||||
case GFXType.MAT2X4: return 32;
|
||||
case GFXType.MAT3X2: return 24;
|
||||
case GFXType.MAT3: return 36;
|
||||
case GFXType.MAT3X4: return 48;
|
||||
case GFXType.MAT4X2: return 32;
|
||||
case GFXType.MAT4X2: return 32;
|
||||
case GFXType.MAT4: return 64;
|
||||
case GFXType.SAMPLER1D:
|
||||
case GFXType.SAMPLER1D_ARRAY:
|
||||
case GFXType.SAMPLER2D:
|
||||
case GFXType.SAMPLER2D_ARRAY:
|
||||
case GFXType.SAMPLER3D:
|
||||
case GFXType.SAMPLER_CUBE: return 4;
|
||||
default: {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
1148
engine/cocos2d/renderer/build/mappings/index.js
Normal file
1148
engine/cocos2d/renderer/build/mappings/index.js
Normal file
File diff suppressed because it is too large
Load Diff
256
engine/cocos2d/renderer/build/mappings/offline-mappings.ts
Normal file
256
engine/cocos2d/renderer/build/mappings/offline-mappings.ts
Normal file
@@ -0,0 +1,256 @@
|
||||
// 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;
|
||||
194
engine/cocos2d/renderer/build/mappings/pipeline/define.ts
Normal file
194
engine/cocos2d/renderer/build/mappings/pipeline/define.ts
Normal file
@@ -0,0 +1,194 @@
|
||||
// import { GFXBuffer } from '../gfx/buffer';
|
||||
// import { GFXBindingType, GFXType } from '../gfx/define';
|
||||
// import { GFXSampler } from '../gfx/sampler';
|
||||
// import { GFXUniformBlock, GFXUniformSampler } from '../gfx/shader';
|
||||
// import { GFXTextureView } from '../gfx/texture-view';
|
||||
|
||||
export const PIPELINE_FLOW_FORWARD: string = 'ForwardFlow';
|
||||
export const PIPELINE_FLOW_SMAA: string = 'SMAAFlow';
|
||||
export const PIPELINE_FLOW_TONEMAP: string = 'ToneMapFlow';
|
||||
|
||||
export enum RenderPassStage {
|
||||
DEFAULT = 100,
|
||||
}
|
||||
|
||||
export enum RenderPriority {
|
||||
MIN = 0,
|
||||
MAX = 0xff,
|
||||
DEFAULT = 0x80,
|
||||
}
|
||||
|
||||
const MAX_BINDING_SUPPORTED = 24; // from WebGL 2 spec
|
||||
export enum UniformBinding {
|
||||
// UBOs
|
||||
UBO_GLOBAL = MAX_BINDING_SUPPORTED - 1,
|
||||
UBO_SHADOW = MAX_BINDING_SUPPORTED - 2,
|
||||
|
||||
UBO_LOCAL = MAX_BINDING_SUPPORTED - 3,
|
||||
UBO_FORWARD_LIGHTS = MAX_BINDING_SUPPORTED - 4,
|
||||
UBO_SKINNING = MAX_BINDING_SUPPORTED - 5,
|
||||
UBO_SKINNING_TEXTURE = MAX_BINDING_SUPPORTED - 6,
|
||||
UBO_UI = MAX_BINDING_SUPPORTED - 7,
|
||||
|
||||
// samplers
|
||||
SAMPLER_JOINTS = MAX_BINDING_SUPPORTED + 1,
|
||||
SAMPLER_ENVIRONMENT = MAX_BINDING_SUPPORTED + 2,
|
||||
|
||||
// rooms left for custom bindings
|
||||
// effect importer prepares bindings according to this
|
||||
CUSTUM_UBO_BINDING_END_POINT = MAX_BINDING_SUPPORTED - 7,
|
||||
CUSTOM_SAMPLER_BINDING_START_POINT = MAX_BINDING_SUPPORTED + 6,
|
||||
}
|
||||
|
||||
// export class UBOGlobal {
|
||||
// public static TIME_OFFSET: number = 0;
|
||||
// public static SCREEN_SIZE_OFFSET: number = UBOGlobal.TIME_OFFSET + 4;
|
||||
// public static SCREEN_SCALE_OFFSET: number = UBOGlobal.SCREEN_SIZE_OFFSET + 4;
|
||||
// public static NATIVE_SIZE_OFFSET: number = UBOGlobal.SCREEN_SCALE_OFFSET + 4;
|
||||
// public static MAT_VIEW_OFFSET: number = UBOGlobal.NATIVE_SIZE_OFFSET + 4;
|
||||
// public static MAT_VIEW_INV_OFFSET: number = UBOGlobal.MAT_VIEW_OFFSET + 16;
|
||||
// public static MAT_PROJ_OFFSET: number = UBOGlobal.MAT_VIEW_INV_OFFSET + 16;
|
||||
// public static MAT_PROJ_INV_OFFSET: number = UBOGlobal.MAT_PROJ_OFFSET + 16;
|
||||
// public static MAT_VIEW_PROJ_OFFSET: number = UBOGlobal.MAT_PROJ_INV_OFFSET + 16;
|
||||
// public static MAT_VIEW_PROJ_INV_OFFSET: number = UBOGlobal.MAT_VIEW_PROJ_OFFSET + 16;
|
||||
// public static CAMERA_POS_OFFSET: number = UBOGlobal.MAT_VIEW_PROJ_INV_OFFSET + 16;
|
||||
// public static EXPOSURE_OFFSET: number = UBOGlobal.CAMERA_POS_OFFSET + 4;
|
||||
// public static MAIN_LIT_DIR_OFFSET: number = UBOGlobal.EXPOSURE_OFFSET + 4;
|
||||
// public static MAIN_LIT_COLOR_OFFSET: number = UBOGlobal.MAIN_LIT_DIR_OFFSET + 4;
|
||||
// public static AMBIENT_SKY_OFFSET: number = UBOGlobal.MAIN_LIT_COLOR_OFFSET + 4;
|
||||
// public static AMBIENT_GROUND_OFFSET: number = UBOGlobal.AMBIENT_SKY_OFFSET + 4;
|
||||
// public static COUNT: number = UBOGlobal.AMBIENT_GROUND_OFFSET + 4;
|
||||
// public static SIZE: number = UBOGlobal.COUNT * 4;
|
||||
|
||||
// public static BLOCK: GFXUniformBlock = {
|
||||
// binding: UniformBinding.UBO_GLOBAL, name: 'CCGlobal', members: [
|
||||
// { name: 'cc_time', type: GFXType.FLOAT4, count: 1 },
|
||||
// { name: 'cc_screenSize', type: GFXType.FLOAT4, count: 1 },
|
||||
// { name: 'cc_screenScale', type: GFXType.FLOAT4, count: 1 },
|
||||
// { name: 'cc_nativeSize', type: GFXType.FLOAT4, count: 1 },
|
||||
// { name: 'cc_matView', type: GFXType.MAT4, count: 1 },
|
||||
// { name: 'cc_matViewInv', type: GFXType.MAT4, count: 1 },
|
||||
// { name: 'cc_matProj', type: GFXType.MAT4, count: 1 },
|
||||
// { name: 'cc_matProjInv', type: GFXType.MAT4, count: 1 },
|
||||
// { name: 'cc_matViewProj', type: GFXType.MAT4, count: 1 },
|
||||
// { name: 'cc_matViewProjInv', type: GFXType.MAT4, count: 1 },
|
||||
// { name: 'cc_cameraPos', type: GFXType.FLOAT4, count: 1 },
|
||||
// { name: 'cc_exposure', type: GFXType.FLOAT4, count: 1 },
|
||||
// { name: 'cc_mainLitDir', type: GFXType.FLOAT4, count: 1 },
|
||||
// { name: 'cc_mainLitColor', type: GFXType.FLOAT4, count: 1 },
|
||||
// { name: 'cc_ambientSky', type: GFXType.FLOAT4, count: 1 },
|
||||
// { name: 'cc_ambientGround', type: GFXType.FLOAT4, count: 1 },
|
||||
// ],
|
||||
// };
|
||||
|
||||
// public view: Float32Array = new Float32Array(UBOGlobal.COUNT);
|
||||
// }
|
||||
|
||||
// export class UBOShadow {
|
||||
// public static MAT_LIGHT_PLANE_PROJ_OFFSET: number = 0;
|
||||
// public static SHADOW_COLOR_OFFSET: number = UBOShadow.MAT_LIGHT_PLANE_PROJ_OFFSET + 16;
|
||||
// public static COUNT: number = UBOShadow.SHADOW_COLOR_OFFSET + 4;
|
||||
// public static SIZE: number = UBOShadow.COUNT * 4;
|
||||
|
||||
// public static BLOCK: GFXUniformBlock = {
|
||||
// binding: UniformBinding.UBO_SHADOW, name: 'CCShadow', members: [
|
||||
// { name: 'cc_matLightPlaneProj', type: GFXType.MAT4, count: 1 },
|
||||
// { name: 'cc_shadowColor', type: GFXType.FLOAT4, count: 1 },
|
||||
// ],
|
||||
// };
|
||||
|
||||
// public view: Float32Array = new Float32Array(UBOShadow.COUNT);
|
||||
// }
|
||||
|
||||
// export const localBindingsDesc: Map<string, IInternalBindingDesc> = new Map<string, IInternalBindingDesc>();
|
||||
|
||||
// export class UBOLocal {
|
||||
// public static MAT_WORLD_OFFSET: number = 0;
|
||||
// public static MAT_WORLD_IT_OFFSET: number = UBOLocal.MAT_WORLD_OFFSET + 16;
|
||||
// public static COUNT: number = UBOLocal.MAT_WORLD_IT_OFFSET + 16;
|
||||
// public static SIZE: number = UBOLocal.COUNT * 4;
|
||||
|
||||
// public static BLOCK: GFXUniformBlock = {
|
||||
// binding: UniformBinding.UBO_LOCAL, name: 'CCLocal', members: [
|
||||
// { name: 'cc_matWorld', type: GFXType.MAT4, count: 1 },
|
||||
// { name: 'cc_matWorldIT', type: GFXType.MAT4, count: 1 },
|
||||
// ],
|
||||
// };
|
||||
|
||||
// public view: Float32Array = new Float32Array(UBOLocal.COUNT);
|
||||
// }
|
||||
// localBindingsDesc.set(UBOLocal.BLOCK.name, {
|
||||
// type: GFXBindingType.UNIFORM_BUFFER,
|
||||
// blockInfo: UBOLocal.BLOCK,
|
||||
// });
|
||||
|
||||
// export class UBOForwardLight {
|
||||
// public static MAX_SPHERE_LIGHTS = 2;
|
||||
// public static MAX_SPOT_LIGHTS = 2;
|
||||
|
||||
// public static SPHERE_LIGHT_POS_OFFSET: number = 0;
|
||||
// public static SPHERE_LIGHT_SIZE_RANGE_OFFSET: number = UBOForwardLight.SPHERE_LIGHT_POS_OFFSET + UBOForwardLight.MAX_SPHERE_LIGHTS * 4;
|
||||
// public static SPHERE_LIGHT_COLOR_OFFSET: number = UBOForwardLight.SPHERE_LIGHT_SIZE_RANGE_OFFSET + UBOForwardLight.MAX_SPHERE_LIGHTS * 4;
|
||||
// public static SPOT_LIGHT_POS_OFFSET: number = UBOForwardLight.SPHERE_LIGHT_COLOR_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;
|
||||
// public static SPOT_LIGHT_SIZE_RANGE_ANGLE_OFFSET: number = UBOForwardLight.SPOT_LIGHT_POS_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;
|
||||
// public static SPOT_LIGHT_DIR_OFFSET: number = UBOForwardLight.SPOT_LIGHT_SIZE_RANGE_ANGLE_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;
|
||||
// public static SPOT_LIGHT_COLOR_OFFSET: number = UBOForwardLight.SPOT_LIGHT_DIR_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;
|
||||
// public static COUNT: number = UBOForwardLight.SPOT_LIGHT_COLOR_OFFSET + UBOForwardLight.MAX_SPOT_LIGHTS * 4;
|
||||
// public static SIZE: number = UBOForwardLight.COUNT * 4;
|
||||
|
||||
// public static BLOCK: GFXUniformBlock = {
|
||||
// binding: UniformBinding.UBO_FORWARD_LIGHTS, name: 'CCForwardLight', members: [
|
||||
// { name: 'cc_sphereLitPos', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPHERE_LIGHTS },
|
||||
// { name: 'cc_sphereLitSizeRange', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPHERE_LIGHTS },
|
||||
// { name: 'cc_sphereLitColor', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPHERE_LIGHTS },
|
||||
// { name: 'cc_spotLitPos', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },
|
||||
// { name: 'cc_spotLitSizeRangeAngle', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },
|
||||
// { name: 'cc_spotLitDir', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },
|
||||
// { name: 'cc_spotLitColor', type: GFXType.FLOAT4, count: UBOForwardLight.MAX_SPOT_LIGHTS },
|
||||
// ],
|
||||
// };
|
||||
|
||||
// public view: Float32Array = new Float32Array(UBOForwardLight.COUNT);
|
||||
// }
|
||||
// localBindingsDesc.set(UBOForwardLight.BLOCK.name, {
|
||||
// type: GFXBindingType.UNIFORM_BUFFER,
|
||||
// blockInfo: UBOForwardLight.BLOCK,
|
||||
// });
|
||||
|
||||
// export class UBOSkinning {
|
||||
// public static MAT_JOINT_OFFSET: number = 0;
|
||||
// public static JOINTS_TEXTURE_SIZE_OFFSET: number = UBOSkinning.MAT_JOINT_OFFSET + 128 * 16;
|
||||
// public static COUNT: number = UBOSkinning.JOINTS_TEXTURE_SIZE_OFFSET + 4;
|
||||
// public static SIZE: number = UBOSkinning.COUNT * 4;
|
||||
|
||||
// public static BLOCK: GFXUniformBlock = {
|
||||
// binding: UniformBinding.UBO_SKINNING, name: 'CCSkinning', members: [
|
||||
// { name: 'cc_matJoint', type: GFXType.MAT4, count: 128 },
|
||||
// { name: 'cc_jointsTextureSize', type: GFXType.FLOAT4, count: 1 },
|
||||
// ],
|
||||
// };
|
||||
// }
|
||||
// localBindingsDesc.set(UBOSkinning.BLOCK.name, {
|
||||
// type: GFXBindingType.UNIFORM_BUFFER,
|
||||
// blockInfo: UBOSkinning.BLOCK,
|
||||
// });
|
||||
|
||||
// export const UNIFORM_JOINTS_TEXTURE: GFXUniformSampler = {
|
||||
// binding: UniformBinding.SAMPLER_JOINTS, name: 'cc_jointsTexture', type: GFXType.SAMPLER2D, count: 1,
|
||||
// };
|
||||
// localBindingsDesc.set(UNIFORM_JOINTS_TEXTURE.name, {
|
||||
// type: GFXBindingType.SAMPLER,
|
||||
// samplerInfo: UNIFORM_JOINTS_TEXTURE,
|
||||
// });
|
||||
|
||||
// export interface IInternalBindingDesc {
|
||||
// type: GFXBindingType;
|
||||
// blockInfo?: GFXUniformBlock;
|
||||
// samplerInfo?: GFXUniformSampler;
|
||||
// }
|
||||
|
||||
// export interface IInternalBindingInst extends IInternalBindingDesc {
|
||||
// buffer?: GFXBuffer;
|
||||
// sampler?: GFXSampler;
|
||||
// textureView?: GFXTextureView;
|
||||
// }
|
||||
Reference in New Issue
Block a user