浏览代码

feat: adding extended support for instancing also in webgl1 devices s… (#763)

Rasmus Brinck 5 年之前
父节点
当前提交
ec4813e80d
共有 2 个文件被更改,包括 15 次插入0 次删除
  1. 4 0
      h3d/impl/Driver.hx
  2. 11 0
      h3d/impl/GlDriver.hx

+ 4 - 0
h3d/impl/Driver.hx

@@ -93,6 +93,10 @@ enum Feature {
 		Supports rendering in wireframe mode.
 	*/
 	Wireframe;
+	/*
+		Supports instanced rendering
+	*/
+	InstancedRendering;
 }
 
 enum QueryKind {

+ 11 - 0
h3d/impl/GlDriver.hx

@@ -234,6 +234,14 @@ class GlDriver extends Driver {
 		#if js
 		// make sure to enable extensions
 		makeFeatures();
+
+		// We need to get instanced rendering by it's ANGLE extension if we are using webgl1
+		if(hasFeature(InstancedRendering) && glES < 3) {
+			var extension:js.html.webgl.extension.ANGLEInstancedArrays =  cast gl.getExtension("ANGLE_instanced_arrays");
+			Reflect.setField(gl,"vertexAttribDivisor",extension.vertexAttribDivisorANGLE);
+			Reflect.setField(gl,"drawElementsInstanced",extension.drawElementsInstancedANGLE);
+		}
+
 		// setup shader optim
 		hxsl.SharedShader.UNROLL_LOOPS = !hasFeature(ShaderModel3);
 		#else
@@ -1562,6 +1570,9 @@ class GlDriver extends Driver {
 
 		case MultipleRenderTargets:
 			mrtExt != null || (mrtExt = gl.getExtension('WEBGL_draw_buffers')) != null;
+			
+		case InstancedRendering:
+			return (glES >= 3) ? true : gl.getExtension("ANGLE_instanced_arrays") != null;
 
 		default:
 			false;