wonder.js
Version:
193 lines (180 loc) • 9.21 kB
JavaScript
'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 */