Przeglądaj źródła

fixed: GlDrawIndirectBuffer instead of GlDispatchIndirectBuffer. not glFenceSync failes -.-

Zoadian 11 lat temu
rodzic
commit
093498ca36
2 zmienionych plików z 5 dodań i 3 usunięć
  1. 2 1
      source/gl/buffer.d
  2. 3 2
      source/gl/renderer.d

+ 2 - 1
source/gl/buffer.d

@@ -8,7 +8,7 @@ enum GlBufferTarget {
 	AtomicCounter = GL_ATOMIC_COUNTER_BUFFER, 
 	CopyRead= GL_COPY_READ_BUFFER, 
 	CopyWrite = GL_COPY_WRITE_BUFFER, 
-	DrawIndirect = GL_DRAW_INDIRECT_BUFFER, 
+	DrawIndirect = GL_DRAW_INDIRECT_BUFFER,
 	DispatchIndirect = GL_DISPATCH_INDIRECT_BUFFER,
 	ElementArray = GL_ELEMENT_ARRAY_BUFFER, 
 	PixelPack = GL_PIXEL_PACK_BUFFER, 
@@ -56,6 +56,7 @@ struct GlBuffer(GlBufferTarget Target, T) {
 alias GlArrayBuffer(T) = GlBuffer!(GlBufferTarget.Array, T);
 alias GlElementArrayBuffer(T) = GlBuffer!(GlBufferTarget.ElementArray, T);
 alias GlShaderStorageBuffer(T) = GlBuffer!(GlBufferTarget.ShaderStorage, T);
+alias GlDrawIndirectBuffer(T) = GlBuffer!(GlBufferTarget.DrawIndirect, T);
 alias GlDispatchIndirectBuffer(T) = GlBuffer!(GlBufferTarget.DispatchIndirect, T);
 alias GlTextureBuffer(T) = GlBuffer!(GlBufferTarget.Texture, T);
 alias GlUniformBuffer(T) = GlBuffer!(GlBufferTarget.Uniform, T);

+ 3 - 2
source/gl/renderer.d

@@ -214,7 +214,7 @@ struct Renderer {
 	GlArrayBuffer!VertexData vertexBuffer; // vertex data for all meshes
 	GlElementArrayBuffer!IndexData indexBuffer; //index data for all meshes
 	GlShaderStorageBuffer!GlDrawParameter perInstanceParamBuffer; // is filled with draw parameters for each instance each frame. shall be accessed as a ringbuffer
-	GlDispatchIndirectBuffer!GlDrawElementsIndirectCommand dispatchIndirectCommandBuffer; // is filled with DrawElementsIndirectCommand for each mesh each frame. shall be accessed as a ringbuffer
+	GlDrawIndirectBuffer!GlDrawElementsIndirectCommand dispatchIndirectCommandBuffer; // is filled with DrawElementsIndirectCommand for each mesh each frame. shall be accessed as a ringbuffer
 	GlSyncManager vertexSyncManager;
 	GlSyncManager indexSyncManager;
 	GlSyncManager perInstanceParamSyncManager;
@@ -346,7 +346,8 @@ struct Renderer {
 		glCheck!glEnable(GL_DEPTH_TEST); scope(exit) glCheck!glDisable(GL_DEPTH_TEST);
 		glCheck!glDepthFunc(GL_LEQUAL);
 			
-		glCheck!glMultiDrawElementsIndirect(GL_TRIANGLES, toGlType!(this.indexBuffer.ValueType), cast(const void*)dispatchIndirectCommandRingbufferIndexForThisFrame, scene.modelData.meshCount, GlDrawElementsIndirectCommand.sizeof);
+		//glCheck!glMultiDrawElementsIndirect(GL_TRIANGLES, toGlType!(this.indexBuffer.ValueType), this.dispatchIndirectCommandBuffer.data + dispatchIndirectCommandRingbufferIndex, scene.modelData.meshCount, GlDrawElementsIndirectCommand.sizeof);
+		glCheck!glMultiDrawElementsIndirect(GL_TRIANGLES, toGlType!(this.indexBuffer.ValueType), cast(const void*)dispatchIndirectCommandRingbufferIndexForThisFrame, scene.modelData.meshCount, 0);
 
 		this.vertexSyncManager.lockRange(vertexRingbufferIndex, scene.modelData.vertexCount);
 		this.indexSyncManager.lockRange(indexRingbufferIndex, scene.modelData.indexCount);