Commit d0677f3d authored by 邱旭's avatar 邱旭

加点东西

parent a5e06412
...@@ -55,6 +55,8 @@ export class D3Renderer extends ObjectRenderer { ...@@ -55,6 +55,8 @@ export class D3Renderer extends ObjectRenderer {
maxVertexUniforms: number maxVertexUniforms: number
floatVertexTextures: boolean; floatVertexTextures: boolean;
private curLightkey: string; private curLightkey: string;
constructor(renderer: WebglRenderer) { constructor(renderer: WebglRenderer) {
super(renderer); super(renderer);
} }
...@@ -80,6 +82,7 @@ export class D3Renderer extends ObjectRenderer { ...@@ -80,6 +82,7 @@ export class D3Renderer extends ObjectRenderer {
//设置剔除,下面根据材质自行设置 //设置剔除,下面根据材质自行设置
//this.setCullFace(1); //this.setCullFace(1);
} }
stop() { stop() {
this.flush(); this.flush();
//原先的视窗需要重新//讲道理应该渲染器自己搞,算了 //原先的视窗需要重新//讲道理应该渲染器自己搞,算了
...@@ -90,27 +93,31 @@ export class D3Renderer extends ObjectRenderer { ...@@ -90,27 +93,31 @@ export class D3Renderer extends ObjectRenderer {
} }
private meshes: Mesh3D[] = []; private meshes: Mesh3D[] = [];
//继续需要的数据 //继续需要的数据
render(obj: Mesh3D) { render(obj: Mesh3D) {
if (!obj.geometry || !obj.material) return; if (!obj.geometry || !obj.material) return;
// var mat = obj.material; const mat = obj.material;
// //提取渲染对象及材质,分组渲染,怎么考虑同一个geometry只需要处理一次attr, const meshes = this.meshes;
// //分组按 //提取渲染对象及材质,分组渲染,怎么考虑同一个geometry只需要处理一次attr,
// // if (!this.meshes.length) { //分组按
// // this.meshes.push(obj); // if (!this.meshes.length) {
// // } else { // this.meshes.push(obj);
// for (var i = 0; i < this.meshes.length; i++) { // } else {
// if (this.meshes[i].material == mat) {//没啥软用 const len = meshes.length;
// this.meshes.splice(i, 0, obj) for (let i = 0; i < len; i++) {
// return if (meshes[i].material == mat) {//没啥软用
// } meshes.splice(i, 0, obj)
return;
}
}
// } // }
// // }
this.meshes.push(obj); meshes.push(obj);
} }
flush() { flush() {
//生成一张阴影的深度贴图 //生成一张阴影的深度贴图
var shadow = getShadowMap(this.lightsConfig, this.meshes, this.renderer); const shadow = getShadowMap(this.lightsConfig, this.meshes, this.renderer);
if (shadow) { if (shadow) {
//绑定过帧缓存,viewport肯定被改了,该回去 //绑定过帧缓存,viewport肯定被改了,该回去
this.renderer.gl.viewport( this.renderer.gl.viewport(
...@@ -124,12 +131,12 @@ export class D3Renderer extends ObjectRenderer { ...@@ -124,12 +131,12 @@ export class D3Renderer extends ObjectRenderer {
} }
//同一材质的模型一起处理,同一个着色器,webglRenderer里会判断,不会重复绑定 //同一材质的模型一起处理,同一个着色器,webglRenderer里会判断,不会重复绑定
var curShader: GLShader = null; let curShader: GLShader = null;
var pointLightNum = this.lightsConfig.pointLights.length; const pointLightNum = this.lightsConfig.pointLights.length;
var dirLightNum = this.lightsConfig.directionalLights.length; const dirLightNum = this.lightsConfig.directionalLights.length;
var gl: WebGLRenderingContext = this.renderer.gl; const gl: WebGLRenderingContext = this.renderer.gl;
var textureManager = this.renderer.textureManager; const textureManager = this.renderer.textureManager;
for (var i = 0; i < this.meshes.length; i++) { for (let i = 0; i < this.meshes.length; i++) {
let mesh = this.meshes[i];//怎么判断是否要重新绑定 let mesh = this.meshes[i];//怎么判断是否要重新绑定
let mat: BaseMaterial = mesh.material; let mat: BaseMaterial = mesh.material;
let geo = mesh.geometry; let geo = mesh.geometry;
......
import { HashObject } from "../../2d/HashObject"; import { HashObject } from "../../2d/HashObject";
import { Texture } from "../../2d/texture"; import { Texture } from "../../2d/texture";
import { Vector3 } from "../math/Vector3";
import { hex2rgb } from "../../2d/utils"; import { hex2rgb } from "../../2d/utils";
...@@ -100,7 +99,7 @@ export class BaseMaterial extends HashObject { ...@@ -100,7 +99,7 @@ export class BaseMaterial extends HashObject {
//所有属性 //所有属性
if (parameters) { if (parameters) {
for (var key in parameters) { for (const key in parameters) {
this[key] = parameters[key]; this[key] = parameters[key];
} }
} }
...@@ -138,4 +137,4 @@ export interface BaseMaterialParamsInt { ...@@ -138,4 +137,4 @@ export interface BaseMaterialParamsInt {
morphTargets?: boolean, morphTargets?: boolean,
morphNormals?: boolean, morphNormals?: boolean,
skinning?: boolean, skinning?: boolean,
} }
\ No newline at end of file
...@@ -24,7 +24,7 @@ export function getCusShader( ...@@ -24,7 +24,7 @@ export function getCusShader(
shadow?: any shadow?: any
) { ) {
//所有参数 //所有参数
var parameters: IShaderParameters = { const parameters: IShaderParameters = {
glUid: render.CONTEXT_UID, glUid: render.CONTEXT_UID,
precision: getMaxPrecision(render),//也可能是材质上传的,再说了TODO precision: getMaxPrecision(render),//也可能是材质上传的,再说了TODO
pointLightsNum: lights.pointLights.length, pointLightsNum: lights.pointLights.length,
...@@ -39,8 +39,8 @@ export function getCusShader( ...@@ -39,8 +39,8 @@ export function getCusShader(
lightAffect: material._lightAffect, lightAffect: material._lightAffect,
useMap: !!material.map && material.map.valid, useMap: !!material.map && material.map.valid,
// @ts-ignore // @ts-ignore
useNormalMap: !!material.normalMap && material.normalMap.valid, useNormalMap: !!material.normalMap && material.normalMap.valid,
useEnvMap: !!material.envMap && material.envMap.valid, useEnvMap: !!material.envMap && material.envMap.valid,
combine: material.combine, combine: material.combine,
...@@ -50,12 +50,12 @@ export function getCusShader( ...@@ -50,12 +50,12 @@ export function getCusShader(
useShadow: shadow && mesh.receiveShadow && material._lightAffect, useShadow: shadow && mesh.receiveShadow && material._lightAffect,
shadowType: shadow && shadow.shadowType, shadowType: shadow && shadow.shadowType,
} };
//计算code, //计算code,
var shaderKey = getShaderKey(parameters); const shaderKey = getShaderKey(parameters);
var cusShader: CusShader; let cusShader: CusShader;
for (var i = 0; i < cacheShaders.length; i++) { for (let i = 0; i < cacheShaders.length; i++) {
if (cacheShaders[i]._glShaderKey === shaderKey) { if (cacheShaders[i]._glShaderKey === shaderKey) {
cusShader = cacheShaders[i]; cusShader = cacheShaders[i];
++cusShader.usedTimes; ++cusShader.usedTimes;
......
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