ソースを参照

Fix webgl2 instancing bug (#1512)

Hugo Amnov 7 年 前
コミット
50a64a7fdf
2 ファイル変更15 行追加0 行削除
  1. 14 0
      src/renderer_gl.cpp
  2. 1 0
      src/renderer_gl.h

+ 14 - 0
src/renderer_gl.cpp

@@ -4528,6 +4528,15 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
 		}
 	}
 
+	void ProgramGL::unbindInstanceData() const
+	{
+		for(uint32_t ii = 0; 0xffff != m_instanceData[ii]; ++ii)
+		{
+			GLint loc = m_instanceData[ii];
+			GL_CHECK(glDisableVertexAttribArray(loc));
+		}
+	}
+
 	void IndexBufferGL::destroy()
 	{
 		GL_CHECK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0) );
@@ -7311,6 +7320,11 @@ BX_TRACE("%d, %d, %d, %s", _array, _srgb, _mipAutogen, getName(_format) );
 							m_occlusionQuery.end();
 						}
 
+						if(isValid(draw.m_instanceDataBuffer))
+						{
+							program.unbindInstanceData();
+						}
+
 						statsNumPrimsSubmitted[primIndex] += numPrimsSubmitted;
 						statsNumPrimsRendered[primIndex]  += numPrimsRendered;
 						statsNumInstances[primIndex]      += numInstances;

+ 1 - 0
src/renderer_gl.h

@@ -1329,6 +1329,7 @@ namespace bgfx { namespace gl
 		void destroy();
 		void init();
 		void bindInstanceData(uint32_t _stride, uint32_t _baseVertex = 0) const;
+		void unbindInstanceData() const;
 
 		void bindAttributesBegin()
 		{