UNPKG

wonder.js

Version:
96 lines (87 loc) 5.59 kB
'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 */