wonder.js
Version:
96 lines (87 loc) • 5.59 kB
JavaScript
'use strict';
var Js_option = require("bs-platform/lib/js/js_option.js");
var Caml_array = require("bs-platform/lib/js/caml_array.js");
var RenderJobUtils$Wonderjs = require("./render/RenderJobUtils.js");
var ArrayService$WonderCommonlib = require("wonder-commonlib/lib/js/src/ArrayService.js");
var AllGLSLLocationService$Wonderjs = require("../../service/record/all/location/AllGLSLLocationService.js");
var SkyboxSceneMainService$Wonderjs = require("../../service/state/main/scene/SkyboxSceneMainService.js");
var AllDeviceManagerService$Wonderjs = require("../../service/record/all/device/AllDeviceManagerService.js");
var UseProgramRenderService$Wonderjs = require("../../service/state/render/program/UseProgramRenderService.js");
var GetComponentGameObjectService$Wonderjs = require("../../service/record/main/gameObject/GetComponentGameObjectService.js");
var NoMaterialShaderIndexAllShaderService$Wonderjs = require("../../service/record/all/shader/NoMaterialShaderIndexAllShaderService.js");
var BindAndUpdateCubemapTextureRenderService$Wonderjs = require("../../service/state/render/texture/cubemap/BindAndUpdateCubemapTextureRenderService.js");
var CreateGetRenederDataSubStateRenderService$Wonderjs = require("../../service/state/render/sub/get_render_data/CreateGetRenederDataSubStateRenderService.js");
var CreateSendRenederDataSubStateRenderService$Wonderjs = require("../../service/state/render/sub/send_render_data/CreateSendRenederDataSubStateRenderService.js");
var HandleNoMaterialShaderUniformConfigDataService$Wonderjs = require("../../service/record/all/sender/uniform/no_material_shader/HandleNoMaterialShaderUniformConfigDataService.js");
function getRenderData(state) {
var gameObjectRecord = state[/* gameObjectRecord */10];
return Js_option.andThen((function (skyboxGameObject) {
return /* tuple */[
GetComponentGameObjectService$Wonderjs.unsafeGetTransformComponent(skyboxGameObject, gameObjectRecord),
GetComponentGameObjectService$Wonderjs.unsafeGetGeometryComponent(skyboxGameObject, gameObjectRecord)
];
}), SkyboxSceneMainService$Wonderjs.getSkyboxGameObject(state));
}
function _prepareGlState(gl, state) {
var deviceManagerRecord = AllDeviceManagerService$Wonderjs.setSide(gl, /* BACK */3, AllDeviceManagerService$Wonderjs.setDepthFunc(gl, gl.LEQUAL, state[/* deviceManagerRecord */20]));
var newrecord = Caml_array.caml_array_dup(state);
newrecord[/* deviceManagerRecord */20] = deviceManagerRecord;
return newrecord;
}
function _sendUniformNoMaterialShaderData(gl, shaderIndex, getRenderDataSubState, state) {
ArrayService$WonderCommonlib.forEach((function (param) {
var sendDataFunc = param[/* sendDataFunc */4];
var getDataFunc = param[/* getDataFunc */3];
var pos = param[/* pos */2];
var name = param[/* name */1];
var match = AllGLSLLocationService$Wonderjs.isUniformLocationExist(pos);
if (match) {
if (name === "u_skyboxVMatrix") {
return sendDataFunc(gl, pos, getDataFunc(getRenderDataSubState));
} else {
return sendDataFunc(gl, param[/* shaderCacheMap */0], /* tuple */[
name,
pos
], getDataFunc(getRenderDataSubState));
}
} else {
return /* () */0;
}
}), HandleNoMaterialShaderUniformConfigDataService$Wonderjs.unsafeGetUniformSendData(shaderIndex, state[/* glslSenderRecord */3]));
return state;
}
function _draw(gl, shaderIndex, param, state) {
var geometryIndex = param[1];
var sendRenderDataSubState = CreateSendRenederDataSubStateRenderService$Wonderjs.createState(state);
RenderJobUtils$Wonderjs.sendAttributeData(gl, /* tuple */[
shaderIndex,
geometryIndex
], sendRenderDataSubState, state);
var getRenderDataSubState = CreateGetRenederDataSubStateRenderService$Wonderjs.createState(state);
_sendUniformNoMaterialShaderData(gl, shaderIndex, getRenderDataSubState, state);
RenderJobUtils$Wonderjs.draw(gl, gl.TRIANGLES, geometryIndex, state);
return state;
}
function _restoreGlState(gl, state) {
var deviceManagerRecord = AllDeviceManagerService$Wonderjs.setSide(gl, /* FRONT */2, AllDeviceManagerService$Wonderjs.setDepthFunc(gl, gl.LESS, state[/* deviceManagerRecord */20]));
var newrecord = Caml_array.caml_array_dup(state);
newrecord[/* deviceManagerRecord */20] = deviceManagerRecord;
return newrecord;
}
function exec(gl, cubemapTextureOpt, renderSkyboxGameObjectDataOpt, renderState) {
if (cubemapTextureOpt !== undefined && renderSkyboxGameObjectDataOpt !== undefined) {
gl.TEXTURE_CUBE_MAP;
var renderState$1 = BindAndUpdateCubemapTextureRenderService$Wonderjs.bindAndUpdate(gl, cubemapTextureOpt, renderState);
var drawSkyboxShaderIndex = NoMaterialShaderIndexAllShaderService$Wonderjs.unsafeGetShaderIndex("skybox", renderState$1[/* shaderRecord */25]);
return _restoreGlState(gl, _draw(gl, drawSkyboxShaderIndex, renderSkyboxGameObjectDataOpt, UseProgramRenderService$Wonderjs.useByShaderIndex(gl, drawSkyboxShaderIndex, _prepareGlState(gl, renderState$1))));
} else {
return renderState;
}
}
exports.getRenderData = getRenderData;
exports._prepareGlState = _prepareGlState;
exports._sendUniformNoMaterialShaderData = _sendUniformNoMaterialShaderData;
exports._draw = _draw;
exports._restoreGlState = _restoreGlState;
exports.exec = exec;
/* RenderJobUtils-Wonderjs Not a pure module */