"""Shows how to use threads to speed up resource loading."""
import time
import d3d11
import d3d11x
from d3d11c import *
message = """Comparison between normal texture loading and threaded loading:
Normal: %.3f seconds
Threaded: %.3f seconds
Threaded version was ~%.2f times %s.
"""
class SampleThreaded(d3d11x.Frame):
def onCreate(self):
self.window.show(SW_HIDE)
textureName = d3d11x.getResourceDir("Textures", "static-barrel.dds")
#Warm the filesystem cache.
dummy = d3d11.Texture(textureName)
COUNT = 10
#Force format conversion, heavy work for the CPU.
FORMAT = FORMAT_R8G8B8A8_UNORM
#Normal loading.
normalStart = time.clock()
for x in range(COUNT):
t = d3d11.Texture(textureName, (0, 0, 1, 0), FORMAT)
normalTime = time.clock() - normalStart
#Threaded loading.
threadStart = time.clock()
loader = d3d11x.ThreadedLoader()
for x in range(COUNT):
loader.addJob(self, "t", d3d11.Texture, textureName, (0, 0, 1, 0), FORMAT)
#loader.wait()
loader.join()
threadTime = time.clock() - threadStart
comp = normalTime / threadTime
result = "faster"
if comp < 1.0:
result = "slower"
d3d11.messageBox(self.window, message % (normalTime, threadTime, comp, result), "Results", 0)
self.exit()
if __name__ == "__main__":
sample = SampleThreaded("Threading - DirectPython 11", __doc__)
sample.mainloop()