wonder.js
Version:
371 lines (368 loc) • 72.4 kB
JavaScript
'use strict';
var Curry = require("bs-platform/lib/js/curry.js");
var Sinon = require("wonder-bs-sinon/lib/js/src/sinon.js");
var Sinon$1 = require("sinon");
var Caml_array = require("bs-platform/lib/js/caml_array.js");
var Caml_option = require("bs-platform/lib/js/caml_option.js");
var Wonder_jest = require("wonder-bs-jest/lib/js/src/wonder_jest.js");
var GLSLTool$Wonderjs = require("../../../../tool/render/core/GLSLTool.js");
var FakeGlTool$Wonderjs = require("../../../../tool/gl/FakeGlTool.js");
var SettingTool$Wonderjs = require("../../../../tool/service/setting/SettingTool.js");
var InstanceTool$Wonderjs = require("../../../../tool/service/instance/InstanceTool.js");
var MainStateTool$Wonderjs = require("../../../../tool/service/state/MainStateTool.js");
var PointLightAPI$Wonderjs = require("../../../../../src/api/light/PointLightAPI.js");
var PointLightTool$Wonderjs = require("../../../../tool/service/light/PointLightTool.js");
var GLSLLocationTool$Wonderjs = require("../../../../tool/service/location/GLSLLocationTool.js");
var InitMaterialTool$Wonderjs = require("../../../../tool/job/no_worker/init/InitMaterialTool.js");
var DirectionLightAPI$Wonderjs = require("../../../../../src/api/light/DirectionLightAPI.js");
var DirectionLightTool$Wonderjs = require("../../../../tool/service/light/DirectionLightTool.js");
var InitMaterialJobTool$Wonderjs = require("../../../../tool/job/no_worker/init/InitMaterialJobTool.js");
var NoWorkerJobConfigTool$Wonderjs = require("../../../../tool/service/noWorkerJob/NoWorkerJobConfigTool.js");
var InitLightMaterialJobTool$Wonderjs = require("../../../../tool/job/no_worker/init/InitLightMaterialJobTool.js");
Wonder_jest.describe("test init light material job", (function (param) {
var sandbox = Sinon.getSandboxDefaultVal(/* () */0);
var state = /* record */[/* contents */MainStateTool$Wonderjs.createState(/* () */0)];
var _buildNoWorkerJobConfig = function (param) {
return NoWorkerJobConfigTool$Wonderjs.buildNoWorkerJobConfig(undefined, "\n [\n {\n \"name\": \"default\",\n \"jobs\": [\n {\n \"name\": \"preget_glslData\"\n },\n {\n \"name\": \"init_light_material\"\n }\n ]\n }\n ]\n ", undefined, "\n[\n {\n \"name\": \"preget_glslData\"\n },\n {\n \"name\": \"init_light_material\"\n }\n]\n ", undefined, /* () */0);
};
beforeEach((function () {
sandbox[0] = Sinon$1.sandbox.create();
state[0] = InitLightMaterialJobTool$Wonderjs.initWithJobConfig(sandbox, _buildNoWorkerJobConfig(/* () */0));
return /* () */0;
}));
afterEach((function () {
return Curry._1(Sinon.restoreSandbox, sandbox[0]);
}));
Wonder_jest.describe("test get attribute location", (function (param) {
Wonder_jest.describe("test get a_position location", (function (param) {
return Wonder_jest.test("test get location", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareGameObject(sandbox, state[0]);
var getAttribLocation = GLSLLocationTool$Wonderjs.getAttribLocation(undefined, sandbox, "a_position");
var state$1 = FakeGlTool$Wonderjs.setFakeGl(FakeGlTool$Wonderjs.buildFakeGl(sandbox, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, Caml_option.some(getAttribLocation), undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, /* () */0), match[0]);
InitLightMaterialJobTool$Wonderjs.exec(state$1);
return Sinon.toCalledOnce(Wonder_jest.Expect[/* expect */0](Sinon.withTwoArgs(Sinon$1.match.any, "a_position", getAttribLocation)));
}));
}));
Wonder_jest.describe("test get a_texCoord location", (function (param) {
return Wonder_jest.test("test get location", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareGameObjectWithCreatedMap(sandbox, state[0]);
var getAttribLocation = GLSLLocationTool$Wonderjs.getAttribLocation(undefined, sandbox, "a_texCoord");
var state$1 = FakeGlTool$Wonderjs.setFakeGl(FakeGlTool$Wonderjs.buildFakeGl(sandbox, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, Caml_option.some(getAttribLocation), undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, /* () */0), match[0]);
InitLightMaterialJobTool$Wonderjs.exec(state$1);
return Sinon.toCalledOnce(Wonder_jest.Expect[/* expect */0](Sinon.withTwoArgs(Sinon$1.match.any, "a_texCoord", getAttribLocation)));
}));
}));
return Wonder_jest.describe("test get a_normal location", (function (param) {
Wonder_jest.test("test get location", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareGameObject(sandbox, state[0]);
var getAttribLocation = GLSLLocationTool$Wonderjs.getAttribLocation(undefined, sandbox, "a_normal");
var state$1 = FakeGlTool$Wonderjs.setFakeGl(FakeGlTool$Wonderjs.buildFakeGl(sandbox, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, Caml_option.some(getAttribLocation), undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, /* () */0), match[0]);
InitLightMaterialJobTool$Wonderjs.exec(state$1);
return Sinon.toCalledOnce(Wonder_jest.Expect[/* expect */0](Sinon.withTwoArgs(Sinon$1.match.any, "a_normal", getAttribLocation)));
}));
return Wonder_jest.describe("test cache", (function (param) {
return Wonder_jest.test("if cached, not query gl location", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareGameObject(sandbox, state[0]);
var match$1 = InitLightMaterialJobTool$Wonderjs.prepareGameObject(sandbox, match[0]);
var getAttribLocation = GLSLLocationTool$Wonderjs.getAttribLocation(undefined, sandbox, "a_normal");
var state$1 = FakeGlTool$Wonderjs.setFakeGl(FakeGlTool$Wonderjs.buildFakeGl(sandbox, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, Caml_option.some(getAttribLocation), undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, /* () */0), match$1[0]);
InitLightMaterialJobTool$Wonderjs.exec(state$1);
return Sinon.toCalledOnce(Wonder_jest.Expect[/* expect */0](Sinon.withTwoArgs(Sinon$1.match.any, "a_normal", getAttribLocation)));
}));
}));
}));
}));
Wonder_jest.describe("test get uniform location", (function (param) {
var _testGetLocationWithPrepareGameObjectFunc = function (name, prepareGameObjectFunc) {
return InitMaterialTool$Wonderjs.testGetLocation(sandbox, name, /* tuple */[
prepareGameObjectFunc,
InitLightMaterialJobTool$Wonderjs.exec
], state);
};
Wonder_jest.describe("test get u_normalMatrix location", (function (param) {
Wonder_jest.test("test get location", (function (param) {
return _testGetLocationWithPrepareGameObjectFunc("u_normalMatrix", InitLightMaterialJobTool$Wonderjs.prepareGameObject);
}));
return Wonder_jest.describe("test cache", (function (param) {
return Wonder_jest.test("if cached, not query gl location", (function (param) {
return InitMaterialTool$Wonderjs.testLocationCache(sandbox, "u_normalMatrix", /* tuple */[
InitLightMaterialJobTool$Wonderjs.prepareGameObject,
InitLightMaterialJobTool$Wonderjs.exec
], state);
}));
}));
}));
Wonder_jest.test("test get u_mMatrix location", (function (param) {
return _testGetLocationWithPrepareGameObjectFunc("u_mMatrix", InitLightMaterialJobTool$Wonderjs.prepareGameObject);
}));
Wonder_jest.test("test get u_cameraPos location", (function (param) {
return _testGetLocationWithPrepareGameObjectFunc("u_cameraPos", InitLightMaterialJobTool$Wonderjs.prepareGameObject);
}));
Wonder_jest.test("test get u_diffuse location", (function (param) {
return _testGetLocationWithPrepareGameObjectFunc("u_diffuse", InitLightMaterialJobTool$Wonderjs.prepareGameObject);
}));
Wonder_jest.test("test get u_specular location", (function (param) {
return _testGetLocationWithPrepareGameObjectFunc("u_specular", InitLightMaterialJobTool$Wonderjs.prepareGameObject);
}));
Wonder_jest.test("test get u_shininess location", (function (param) {
return _testGetLocationWithPrepareGameObjectFunc("u_shininess", InitLightMaterialJobTool$Wonderjs.prepareGameObject);
}));
Wonder_jest.test("test get u_diffuseMapSampler location", (function (param) {
return _testGetLocationWithPrepareGameObjectFunc("u_diffuseMapSampler", InitLightMaterialJobTool$Wonderjs.prepareGameObjectWithCreatedMap);
}));
return Wonder_jest.test("test get u_specularMapSampler location", (function (param) {
return _testGetLocationWithPrepareGameObjectFunc("u_specularMapSampler", InitLightMaterialJobTool$Wonderjs.prepareGameObjectWithCreatedMap);
}));
}));
return Wonder_jest.describe("test glsl", (function (param) {
Wonder_jest.test("glsl only set glPosition,glFragColor once", (function (param) {
return InitMaterialTool$Wonderjs.testOnlySeGlPositionGlFragColorOnce(sandbox, (function (param, param$1) {
return InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, param, param$1);
}), state);
}));
return Wonder_jest.describe("test shader lib's glsl", (function (param) {
Wonder_jest.test("test common shader lib's glsl", (function (param) {
return InitMaterialTool$Wonderjs.testCommonShaderLibGlsl(sandbox, (function (param, param$1) {
return InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, param, param$1);
}), state);
}));
Wonder_jest.test("test vertex shader lib's glsl", (function (param) {
return InitMaterialTool$Wonderjs.testVertexShaderLibGlsl(sandbox, (function (param, param$1) {
return InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, param, param$1);
}), state);
}));
Wonder_jest.test("test normal shader lib's glsl", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
return Wonder_jest.Expect[/* toContainString */11]("attribute vec3 a_normal;", Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.getVsSource(match[1])));
}));
Wonder_jest.describe("test modelMatrix instance shader libs", (function (param) {
return InitMaterialJobTool$Wonderjs.testModelMatrixInstanceShaderLibs(sandbox, /* tuple */[
(function (param, param$1) {
return InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, param, param$1);
}),
(function (param, param$1) {
return InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSLNotExec(InitLightMaterialJobTool$Wonderjs.prepareGameObject, param, param$1);
}),
InitLightMaterialJobTool$Wonderjs.exec
], state);
}));
Wonder_jest.describe("test normalMatrix instance shader libs", (function (param) {
Wonder_jest.test("if has no sourceInstance component, use normalMatrix_noInstance shader lib", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getVsSource(match[1]), /* :: */[
"uniform mat3 u_normalMatrix;",
/* :: */[
"mat3 normalMatrix = u_normalMatrix;",
/* [] */0
]
])), true);
}));
return Wonder_jest.describe("else", (function (param) {
Wonder_jest.test("if support hardware instance, use normalMatrix_hardware_instance shader lib", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSLNotExec(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
var match$1 = InstanceTool$Wonderjs.addSourceInstance(match[2], match[0]);
var state$1 = InstanceTool$Wonderjs.setGPUDetectDataAllowHardwareInstance(sandbox, match$1[0]);
InitLightMaterialJobTool$Wonderjs.exec(state$1);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getVsSource(match[1]), /* :: */[
"attribute vec3 a_normalVec3_0;",
/* :: */[
"attribute vec3 a_normalVec3_1;",
/* :: */[
"attribute vec3 a_normalVec3_2;",
/* :: */[
"mat3 normalMatrix = mat3(a_normalVec3_0, a_normalVec3_1, a_normalVec3_2);",
/* [] */0
]
]
]
])), true);
}));
return Wonder_jest.describe("else, use normalMatrix_batch_instance shader lib", (function (param) {
var _setGPUDetectDataAllowBatchInstance = function (state) {
var newrecord = Caml_array.caml_array_dup(state);
var init = state[/* gpuDetectRecord */5];
newrecord[/* gpuDetectRecord */5] = /* record */[
/* extensionInstancedArrays */undefined,
/* extensionElementIndexUint */init[/* extensionElementIndexUint */1],
/* precision */init[/* precision */2],
/* maxTextureUnit */init[/* maxTextureUnit */3]
];
return newrecord;
};
Wonder_jest.test("if state->gpuConfig->useHardwareInstance == false, use batch", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSLNotExec(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
var match$1 = InstanceTool$Wonderjs.addSourceInstance(match[2], match[0]);
var state$1 = SettingTool$Wonderjs.setGPU(/* record */[/* useHardwareInstance */false], match$1[0]);
InitLightMaterialJobTool$Wonderjs.exec(state$1);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getVsSource(match[1]), /* :: */[
"uniform mat3 u_normalMatrix;",
/* :: */[
"mat3 normalMatrix = u_normalMatrix;",
/* [] */0
]
])), true);
}));
return Wonder_jest.test("if gpu not support hardware instance, use batch", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSLNotExec(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
var match$1 = InstanceTool$Wonderjs.addSourceInstance(match[2], match[0]);
var state$1 = _setGPUDetectDataAllowBatchInstance(match$1[0]);
var state$2 = InstanceTool$Wonderjs.setGPUDetectDataAllowBatchInstance(state$1);
InitLightMaterialJobTool$Wonderjs.exec(state$2);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getVsSource(match[1]), /* :: */[
"uniform mat3 u_normalMatrix;",
/* :: */[
"mat3 normalMatrix = u_normalMatrix;",
/* [] */0
]
])), true);
}));
}));
}));
}));
Wonder_jest.describe("test light_common shader lib's glsl", (function (param) {
Wonder_jest.test("test vs glsl", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getVsSource(match[1]), /* :: */[
"\nvarying vec3 v_worldPosition;\n\n#if POINT_LIGHTS_COUNT > 0\nstruct PointLight {\n vec3 position;\n vec3 color;\n float intensity;\n\n float range;\n float constant;\n float linear;\n float quadratic;\n};\nuniform PointLight u_pointLights[POINT_LIGHTS_COUNT];\n\n#endif\n\n\n#if DIRECTION_LIGHTS_COUNT > 0\nstruct DirectionLight {\n vec3 direction;\n\n float intensity;\n\n vec3 color;\n};\nuniform DirectionLight u_directionLights[DIRECTION_LIGHTS_COUNT];\n#endif\n",
/* :: */[
"\nvec3 getDirectionLightDir(vec3 lightDirection);\nvec3 getPointLightDirByLightPos(vec3 lightPos);\nvec3 getPointLightDirByLightPos(vec3 lightPos, vec3 worldPosition);\n ",
/* :: */[
"\nvec3 getDirectionLightDir(vec3 lightDirection){\n lightDirection = normalize(lightDirection);\n\n return -lightDirection;\n}\nvec3 getPointLightDirByLightPos(vec3 lightPos){\n return lightPos - v_worldPosition;\n}\nvec3 getPointLightDirByLightPos(vec3 lightPos, vec3 worldPosition){\n return lightPos - worldPosition;\n}\n ",
/* [] */0
]
]
])), true);
}));
return Wonder_jest.test("test fs glsl", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getFsSource(match[1]), /* :: */[
"\nvarying vec3 v_worldPosition;\n\n#if POINT_LIGHTS_COUNT > 0\nstruct PointLight {\n vec3 position;\n vec3 color;\n float intensity;\n\n float range;\n float constant;\n float linear;\n float quadratic;\n};\nuniform PointLight u_pointLights[POINT_LIGHTS_COUNT];\n\n#endif\n\n\n#if DIRECTION_LIGHTS_COUNT > 0\nstruct DirectionLight {\n vec3 direction;\n\n float intensity;\n\n vec3 color;\n};\nuniform DirectionLight u_directionLights[DIRECTION_LIGHTS_COUNT];\n#endif\n",
/* :: */[
"\nvec3 getDirectionLightDir(vec3 lightDirection);\nvec3 getPointLightDirByLightPos(vec3 lightPos);\nvec3 getPointLightDirByLightPos(vec3 lightPos, vec3 worldPosition);\n ",
/* :: */[
"\nvec3 getDirectionLightDir(vec3 lightDirection){\n lightDirection = normalize(lightDirection);\n\n return -lightDirection;\n}\nvec3 getPointLightDirByLightPos(vec3 lightPos){\n return lightPos - v_worldPosition;\n}\nvec3 getPointLightDirByLightPos(vec3 lightPos, vec3 worldPosition){\n return lightPos - worldPosition;\n}\n ",
/* [] */0
]
]
])), true);
}));
}));
Wonder_jest.test("test light_setWorldPosition shader lib", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getVsSource(match[1]), /* :: */[
"v_worldPosition = vec3(mMatrix * vec4(a_position, 1.0));",
/* [] */0
])), true);
}));
Wonder_jest.describe("test map shader lib", (function (param) {
Wonder_jest.describe("test diffuse map shader lib", (function (param) {
Wonder_jest.describe("if has map", (function (param) {
Wonder_jest.test("test vs glsl", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObjectWithCreatedMap, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getVsSource(match[1]), /* :: */[
"varying vec2 v_diffuseMapTexCoord;",
/* :: */[
"v_diffuseMapTexCoord = a_texCoord;",
/* [] */0
]
])), true);
}));
return Wonder_jest.describe("test fs glsl", (function (param) {
Wonder_jest.test("test", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObjectWithCreatedMap, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getFsSource(match[1]), /* :: */[
"uniform sampler2D u_diffuseMapSampler;",
/* :: */[
"uniform vec3 u_diffuse;",
/* :: */[
"varying vec2 v_diffuseMapTexCoord;",
/* :: */[
"vec4 getMaterialDiffuse() {\n vec4 texelColor = texture2D(u_diffuseMapSampler, v_diffuseMapTexCoord);\n\n return vec4(texelColor.rgb * u_diffuse, texelColor.a);\n }",
/* [] */0
]
]
]
])), true);
}));
return Wonder_jest.test("should contain u_diffuse only once", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObjectWithCreatedMap, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containSpecifyCount(GLSLTool$Wonderjs.getFsSource(match[1]), "uniform vec3 u_diffuse;", 1, /* () */0)), true);
}));
}));
}));
return Wonder_jest.describe("else", (function (param) {
return Wonder_jest.test("test fs glsl", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getFsSource(match[1]), /* :: */[
"uniform vec3 u_diffuse;",
/* :: */[
"\n vec4 getMaterialDiffuse() {\n return vec4(u_diffuse, 1.0);\n }\n ",
/* [] */0
]
])), true);
}));
}));
}));
Wonder_jest.describe("test specular map shader lib", (function (param) {
Wonder_jest.describe("if has map", (function (param) {
Wonder_jest.test("test vs glsl", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObjectWithCreatedMap, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getVsSource(match[1]), /* :: */[
"varying vec2 v_specularMapTexCoord;",
/* :: */[
"v_specularMapTexCoord = a_texCoord;",
/* [] */0
]
])), true);
}));
return Wonder_jest.test("test fs glsl", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObjectWithCreatedMap, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getFsSource(match[1]), /* :: */[
"uniform sampler2D u_specularMapSampler;",
/* :: */[
"varying vec2 v_specularMapTexCoord;",
/* :: */[
"float getSpecularStrength() {\n return texture2D(u_specularMapSampler, v_specularMapTexCoord).r;\n }",
/* [] */0
]
]
])), true);
}));
}));
return Wonder_jest.describe("else", (function (param) {
return Wonder_jest.test("test fs glsl", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getFsSource(match[1]), /* :: */[
"float getSpecularStrength() {\n return 1.0;\n }",
/* [] */0
])), true);
}));
}));
}));
Wonder_jest.test("test no_light_map shader lib", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getFsSource(match[1]), /* :: */[
"\n vec3 getMaterialLight() {\n return vec3(0.0);\n }\n ",
/* [] */0
])), true);
}));
Wonder_jest.test("test no_emission_map shader lib", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getFsSource(match[1]), /* :: */[
"\n vec3 getMaterialEmission() {\n return vec3(0.0);\n }\n ",
/* [] */0
])), true);
}));
Wonder_jest.describe("test no_normal_map shader lib", (function (param) {
Wonder_jest.test("test vs glsl", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);
return Curry._2(Wonder_jest.Expect[/* Operators */25][/* = */5], Wonder_jest.Expect[/* expect */0](GLSLTool$Wonderjs.containMultiline(GLSLTool$Wonderjs.getVsSource(match[1]), /* :: */[
"varying vec3 v_normal;",
/* :: */[
"v_normal = normalize(normalMatrix * a_normal);",
/* [] */0
]
])), true);
}));
return Wonder_jest.test("test fs glsl", (function (param) {
var match = InitLightMaterialJobTool$Wonderjs.prepareForJudgeGLSL(InitLightMaterialJobTool$Wonderjs.prepareGameObject, sandbox, state[0]);