Commit 736eac75 authored by 邱旭's avatar 邱旭

修复鸿蒙3.0问题,只是临时修复,不确定是否会有其他的影响

parent b74d8660
......@@ -361,7 +361,8 @@ export class BatchRenderer extends ObjectRenderer {
// this.indexBuffer.update();
//暂时出现了bug,ios不做特殊处理先,以后有时间排查,暂时应该影响不大
//貌似没问题了(20210601),但是感觉性能差别不大,先不加了,到时要加的话,也要打开start方法里的注释
if (osType == "ios" && false) {
// TODO 华为鸿蒙3.0问题
// if (getOsType() == "ios" && false) {
//可能有一帧,在多个地方执行flush
// this is still needed for IOS performance..
// it really does not like uploading to the same buffer in a single frame!
......@@ -380,7 +381,10 @@ export class BatchRenderer extends ObjectRenderer {
.addAttribute(vertexBuffer, attrs.aVertexPosition, gl.FLOAT, false, this.vertByteSize, 0)
.addAttribute(vertexBuffer, attrs.aTextureCoord, gl.FLOAT, true, this.vertByteSize, 2 * 4)
.addAttribute(vertexBuffer, attrs.aColor, gl.UNSIGNED_BYTE, true, this.vertByteSize, 4 * 4)
.addAttribute(vertexBuffer, attrs.aTextureId, gl.FLOAT, false, this.vertByteSize, 5 * 4);
// .addAttribute(vertexBuffer, attrs.aTextureId, gl.FLOAT, false, this.vertByteSize, 5 * 4);//理由同上
if (attrs.aTextureId) {
vao.addAttribute(vertexBuffer, attrs.aTextureId, gl.FLOAT, false, this.vertByteSize, 5 * 4);
}
this.vaos[this.vertexCount] = vao;
// console.log(this.vertexCount)
......@@ -393,13 +397,13 @@ export class BatchRenderer extends ObjectRenderer {
this.vertexCount++;
}
else {
// lets use the faster option, always use buffer number 0
this.vertexBuffers[this.vertexCount].upload(buffer.vertices, 0, true);
this.indexBuffers[this.vertexCount].upload(indexBuffer, 0, true);
}
// }
// else {
//
// // lets use the faster option, always use buffer number 0
// this.vertexBuffers[this.vertexCount].upload(buffer.vertices, 0, true);
// this.indexBuffers[this.vertexCount].upload(indexBuffer, 0, true);
// }
// this.renderer.state.set(this.state);
......@@ -476,10 +480,11 @@ export class BatchRenderer extends ObjectRenderer {
this.renderer.bindShader(this.shader);
// if (osType != "ios") {//暂时出现了bug,ios不做特殊处理先
this.renderer.bindVao(this.vaos[this.vertexCount]);
this.vertexBuffers[this.vertexCount].bind();
this.indexBuffers[this.vertexCount].bind();
// if (getOsType() != "ios") {//暂时出现了bug,ios不做特殊处理先
// TODO 鸿蒙3.0问题
// this.renderer.bindVao(this.vaos[this.vertexCount]);
// this.vertexBuffers[this.vertexCount].bind();
// this.indexBuffers[this.vertexCount].bind();
// }
}
......
......@@ -50,6 +50,8 @@ export class D3Renderer extends ObjectRenderer {
maxVertexUniforms: number
floatVertexTextures: boolean;
private curLightkey: string;
constructor(renderer: WebglRenderer) {
super(renderer);
}
......@@ -60,7 +62,6 @@ export class D3Renderer extends ObjectRenderer {
var vertexTextures = maxVertexTextures > 0;
var floatFragmentTextures = !!gl.getExtension("OES_texture_float");
//传入的数据纹理暂时有问题,是UNPACK_ALIGNMENT还是UNPACK_FLIP_Y_WEBGL的问题未知,所以不管先
// this.floatVertexTextures = false//vertexTextures && floatFragmentTextures;
this.floatVertexTextures = vertexTextures && floatFragmentTextures;
}
start() {
......@@ -76,6 +77,7 @@ export class D3Renderer extends ObjectRenderer {
//设置剔除,下面根据材质自行设置
//this.setCullFace(1);
}
stop() {
this.flush();
//原先的视窗需要重新//讲道理应该渲染器自己搞,算了
......@@ -89,25 +91,27 @@ export class D3Renderer extends ObjectRenderer {
//继续需要的数据
render(obj: Mesh3D) {
if (!obj.geometry || !obj.material) return;
var mat = obj.material;
var geo = obj.geometry;
const mat = obj.material;
const meshes = this.meshes;
//提取渲染对象及材质,分组渲染,怎么考虑同一个geometry只需要处理一次attr,
//分组按
// if (!this.meshes.length) {
// this.meshes.push(obj);
// } else {
for (var i = 0; i < this.meshes.length; i++) {
if (this.meshes[i].material == mat) {//没啥软用
this.meshes.splice(i, 0, obj)
return
const len = meshes.length;
for (let i = 0; i < len; i++) {
if (meshes[i].material == mat) {//没啥软用
meshes.splice(i, 0, obj)
return;
}
}
// }
this.meshes.push(obj);
meshes.push(obj);
}
flush() {
//生成一张阴影的深度贴图
var shadow = getShadowMap(this.lightsConfig, this.meshes, this.renderer);
const shadow = getShadowMap(this.lightsConfig, this.meshes, this.renderer);
if (shadow) {
//绑定过帧缓存,viewport肯定被改了,该回去
this.renderer.gl.viewport(
......@@ -121,12 +125,12 @@ export class D3Renderer extends ObjectRenderer {
}
//同一材质的模型一起处理,同一个着色器,webglRenderer里会判断,不会重复绑定
var curShader: GLShader = null;
var pointLightNum = this.lightsConfig.pointLights.length;
var dirLightNum = this.lightsConfig.directionalLights.length;
var gl: WebGLRenderingContext = this.renderer.gl;
var textureManager = this.renderer.textureManager;
for (var i = 0; i < this.meshes.length; i++) {
let curShader: GLShader = null;
const pointLightNum = this.lightsConfig.pointLights.length;
const dirLightNum = this.lightsConfig.directionalLights.length;
const gl: WebGLRenderingContext = this.renderer.gl;
const textureManager = this.renderer.textureManager;
for (let i = 0; i < this.meshes.length; i++) {
let mesh = this.meshes[i];//怎么判断是否要重新绑定
let mat: BaseMaterial = mesh.material;
let geo = mesh.geometry;
......@@ -226,7 +230,7 @@ export class D3Renderer extends ObjectRenderer {
//是否带环境贴图
if (mat.envMap && mat.envMap.valid) {//环境贴图先不考虑图集的情况,一般一张大jpg
//找纹理,绑定纹理,多个纹理也是一样的方法
uniforms["uEnvMap"] = textureManager.bindTexture(mat.envMap, undefined, false);;
uniforms["uEnvMap"] = textureManager.bindTexture(mat.envMap, undefined, false);
//反射率
uniforms["uReflectivity"] = mat.reflectivity;
//传相机位置
......
......@@ -311,7 +311,7 @@ const VERT = [
" uniform mat4 uBindMatrix;",
" uniform mat4 uBindMatrixInverse;",
" #ifdef BONE_TEXTURE",
" uniform sampler2D uBoneTexture;",
" uniform highp sampler2D uBoneTexture;",
" uniform int uBoneTextureSize;",
" mat4 getBoneMatrix( const in float i ) {",
" float j = i * 4.0;",
......
......@@ -63,7 +63,8 @@ var compileShader = function (gl:WebGLRenderingContext, type:number, src:string)
gl.compileShader(shader);
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
console.log(gl.getShaderInfoLog(shader));
console.error(src);
console.error(gl.getShaderInfoLog(shader));
return null;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment