UNPKG

wonder.js

Version:
193 lines (180 loc) 9.21 kB
'use strict'; var Log$WonderLog = require("wonder-log/lib/js/src/Log.js"); var DrawGLSLService$Wonderjs = require("../../../service/record/all/sender/DrawGLSLService.js"); var ArrayService$WonderCommonlib = require("wonder-commonlib/lib/js/src/ArrayService.js"); var GeometryRenderService$Wonderjs = require("../../../service/state/render/geometry/GeometryRenderService.js"); var AllGLSLLocationService$Wonderjs = require("../../../service/record/all/location/AllGLSLLocationService.js"); var UseProgramRenderService$Wonderjs = require("../../../service/state/render/program/UseProgramRenderService.js"); var ArrayBufferRenderService$Wonderjs = require("../../../service/state/render/vboBuffer/ArrayBufferRenderService.js"); var ElementArrayBufferRenderService$Wonderjs = require("../../../service/state/render/vboBuffer/ElementArrayBufferRenderService.js"); var GetGeometryIndicesRenderService$Wonderjs = require("../../../service/state/render/geometry/GetGeometryIndicesRenderService.js"); var GetGeometryNormalsRenderService$Wonderjs = require("../../../service/state/render/geometry/GetGeometryNormalsRenderService.js"); var GetGeometryVerticesRenderService$Wonderjs = require("../../../service/state/render/geometry/GetGeometryVerticesRenderService.js"); var HandleAttributeConfigDataService$Wonderjs = require("../../../service/record/all/sender/attribute/HandleAttributeConfigDataService.js"); var GetGeometryTexCoordsRenderService$Wonderjs = require("../../../service/state/render/geometry/GetGeometryTexCoordsRenderService.js"); var HandleUniformRenderObjectModelService$Wonderjs = require("../../../service/record/all/sender/uniform/HandleUniformRenderObjectModelService.js"); var HandleUniformRenderObjectMaterialService$Wonderjs = require("../../../service/record/all/sender/uniform/HandleUniformRenderObjectMaterialService.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"); function _getOrCreateBuffer(buffer, param, param$1, state) { var match = param$1[1]; var match$1 = param$1[0]; var elementArrayBufferMap = match$1[3]; var geometryIndex = param[1]; var gl = param[0]; var exit = 0; switch (buffer) { case 0 : return ArrayBufferRenderService$Wonderjs.getOrCreateBuffer(gl, /* tuple */[ geometryIndex, match$1[0] ], match[0], state); case 1 : return ArrayBufferRenderService$Wonderjs.getOrCreateBuffer(gl, /* tuple */[ geometryIndex, match$1[2] ], match[2], state); case 2 : return ArrayBufferRenderService$Wonderjs.getOrCreateBuffer(gl, /* tuple */[ geometryIndex, match$1[1] ], match[1], state); case 3 : var match$2 = GeometryRenderService$Wonderjs.unsafeGetIndicesType(geometryIndex, state); if (match$2) { return ElementArrayBufferRenderService$Wonderjs.getOrCreate32Buffer(gl, /* tuple */[ geometryIndex, elementArrayBufferMap ], match[4], state); } else { return ElementArrayBufferRenderService$Wonderjs.getOrCreate16Buffer(gl, /* tuple */[ geometryIndex, elementArrayBufferMap ], match[3], state); } case 4 : case 5 : exit = 1; break; } if (exit === 1) { return Log$WonderLog.fatal(Log$WonderLog.buildFatalMessage("_getOrCreateBuffer", "unknown buffer: " + (String(buffer) + ""), "", "", "")); } } function _directlySendAttributeData(gl, param, sendRenderDataSubState, state) { var vboBufferRecord = state[/* vboBufferRecord */1]; var currentGeometryBufferMapAndGetPointsFuncsTuple_000 = /* tuple */[ vboBufferRecord[/* geometryVertexBufferMap */0], vboBufferRecord[/* geometryTexCoordBufferMap */1], vboBufferRecord[/* geometryNormalBufferMap */2], vboBufferRecord[/* geometryElementArrayBufferMap */3] ]; var currentGeometryBufferMapAndGetPointsFuncsTuple_001 = /* tuple */[ GetGeometryVerticesRenderService$Wonderjs.getVertices, GetGeometryTexCoordsRenderService$Wonderjs.getTexCoords, GetGeometryNormalsRenderService$Wonderjs.getNormals, GetGeometryIndicesRenderService$Wonderjs.getIndices16, GetGeometryIndicesRenderService$Wonderjs.getIndices32 ]; var currentGeometryBufferMapAndGetPointsFuncsTuple = /* tuple */[ currentGeometryBufferMapAndGetPointsFuncsTuple_000, currentGeometryBufferMapAndGetPointsFuncsTuple_001 ]; var dataTuple_001 = param[1]; var dataTuple = /* tuple */[ gl, dataTuple_001 ]; ArrayService$WonderCommonlib.forEach((function (param) { var arrayBuffer = _getOrCreateBuffer(param[/* buffer */2], dataTuple, currentGeometryBufferMapAndGetPointsFuncsTuple, state); return param[/* sendFunc */3](gl, /* tuple */[ param[/* size */1], param[/* pos */0] ], arrayBuffer, sendRenderDataSubState); }), HandleAttributeConfigDataService$Wonderjs.unsafeGetAttributeSendData(param[0], state[/* glslSenderRecord */3])); return state; } var sendAttributeData = _directlySendAttributeData; function sendUniformRenderObjectModelData(gl, param, param$1) { var getRenderDataSubState = param$1[0]; var transformIndex = param[1]; ArrayService$WonderCommonlib.forEach((function (param) { var pos = param[/* pos */0]; var match = AllGLSLLocationService$Wonderjs.isUniformLocationExist(pos); if (match) { return param[/* sendDataFunc */2](gl, pos, param[/* getDataFunc */1](transformIndex, getRenderDataSubState)); } else { return /* () */0; } }), HandleUniformRenderObjectModelService$Wonderjs.unsafeGetUniformSendData(param[0], param$1[1][/* glslSenderRecord */3])); return /* () */0; } function sendUniformRenderObjectMaterialData(gl, param, getRenderDataSubState, state) { var materialIndex = param[1]; ArrayService$WonderCommonlib.forEach((function (param) { return param[/* sendDataFunc */4](gl, param[/* shaderCacheMap */0], /* tuple */[ param[/* name */1], param[/* pos */2] ], param[/* getDataFunc */3](materialIndex, getRenderDataSubState)); }), HandleUniformRenderObjectMaterialService$Wonderjs.unsafeGetUniformSendData(param[0], state[/* glslSenderRecord */3])); return state; } function render(gl, param, bindAndUpdateFunc, state) { var shaderIndex = param[2]; var materialIndex = param[1]; var state$1 = UseProgramRenderService$Wonderjs.useByShaderIndex(gl, shaderIndex, state); var sendRenderDataSubState = CreateSendRenederDataSubStateRenderService$Wonderjs.createState(state$1); var state$2 = sendAttributeData(gl, /* tuple */[ shaderIndex, param[4] ], sendRenderDataSubState, state$1); var getRenderDataSubState = CreateGetRenederDataSubStateRenderService$Wonderjs.createState(state$2); sendUniformRenderObjectModelData(gl, /* tuple */[ shaderIndex, param[0] ], /* tuple */[ getRenderDataSubState, state$2 ]); var record = state$2[/* glslSenderRecord */3]; var lastSendMaterialData = record[/* lastSendMaterialData */11]; var exit = 0; if (lastSendMaterialData !== undefined) { var match = lastSendMaterialData; if (match[0] === materialIndex && match[1] === shaderIndex) { return state$2; } else { exit = 1; } } else { exit = 1; } if (exit === 1) { record[/* lastSendMaterialData */11] = /* tuple */[ materialIndex, shaderIndex ]; var getRenderDataSubState$1 = CreateGetRenederDataSubStateRenderService$Wonderjs.createState(state$2); var state$3 = bindAndUpdateFunc(gl, materialIndex, state$2); return sendUniformRenderObjectMaterialData(gl, /* tuple */[ shaderIndex, materialIndex ], getRenderDataSubState$1, state$3); } } function draw(gl, glDrawMode, geometryIndex, state) { return DrawGLSLService$Wonderjs.drawElement(/* tuple */[ glDrawMode, GeometryRenderService$Wonderjs.getIndexType(gl, geometryIndex, state), GeometryRenderService$Wonderjs.getIndexTypeSize(gl, geometryIndex, state), GetGeometryIndicesRenderService$Wonderjs.getIndicesCount(geometryIndex, state) ], gl); } exports._getOrCreateBuffer = _getOrCreateBuffer; exports._directlySendAttributeData = _directlySendAttributeData; exports.sendAttributeData = sendAttributeData; exports.sendUniformRenderObjectModelData = sendUniformRenderObjectModelData; exports.sendUniformRenderObjectMaterialData = sendUniformRenderObjectMaterialData; exports.render = render; exports.draw = draw; /* Log-WonderLog Not a pure module */