__init__.py (6210B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\trinity\__init__.py 2 from __future__ import absolute_import 3 import logging 4 import blue 5 from . import _utils 6 _utils.AssertNotOnProxyOrServer() 7 from d3dinfo import availablePlatforms 8 from ._singletons import * 9 from ._trinity import * 10 from .renderJob import CreateRenderJob 11 from .renderJobUtils import * 12 logger = logging.getLogger(__name__) 13 14 def GetEnumValueName(enumName, value): 15 if enumName in globals(): 16 enum = globals()[enumName] 17 result = '' 18 for enumKeyName, (enumKeyValue, enumKeydocString) in enum.values.iteritems(): 19 if enumKeyValue == value: 20 if result != '': 21 result += ' | ' 22 result += enumKeyName 23 24 return result 25 26 27 def GetEnumValueNameAsBitMask(enumName, value): 28 if enumName in globals(): 29 enum = globals()[enumName] 30 result = '' 31 for enumKeyName, (enumKeyValue, enumKeydocString) in enum.values.iteritems(): 32 if enumKeyValue & value == enumKeyValue: 33 if result != '': 34 result += ' | ' 35 result += enumKeyName 36 37 return result 38 39 40 def ConvertTriFileToGranny(path): 41 helper = TriGeometryRes() 42 return helper.ConvertTriFileToGranny(path) 43 44 45 def LoadDone(evt): 46 evt.isDone = True 47 48 49 def WaitForResourceLoads(): 50 blue.resMan.Wait() 51 52 53 def WaitForUrgentResourceLoads(): 54 blue.resMan.WaitUrgent() 55 56 57 def LoadUrgent(path): 58 blue.resMan.SetUrgentResourceLoads(True) 59 obj = Load(path) 60 blue.resMan.SetUrgentResourceLoads(False) 61 return obj 62 63 64 def GetResourceUrgent(path, extra = ''): 65 blue.resMan.SetUrgentResourceLoads(True) 66 obj = blue.resMan.GetResource(path, extra) 67 blue.resMan.SetUrgentResourceLoads(False) 68 return obj 69 70 71 def Save(obj, path): 72 blue.motherLode.Delete(path) 73 return blue.resMan.SaveObject(obj, path) 74 75 76 def SaveRenderTarget(filename, rt = None): 77 if rt is None: 78 rt = device.GetRenderContext().GetDefaultBackBuffer() 79 if not rt.isReadable: 80 readable = Tr2RenderTarget(rt.width, rt.height, 1, rt.format) 81 rt.Resolve(readable) 82 return Tr2HostBitmap(readable).Save(filename) 83 else: 84 return Tr2HostBitmap(rt).Save(filename) 85 86 87 def _StoreGPUInfoInCrashHeaders(): 88 try: 89 adapterInfo = adapters.GetAdapterInfo(adapters.DEFAULT_ADAPTER) 90 blue.SetCrashKeyValues('GPU_Description', adapterInfo.description) 91 blue.SetCrashKeyValues('GPU_Driver', adapterInfo.driver) 92 blue.SetCrashKeyValues('GPU_VendorId', str(adapterInfo.vendorID)) 93 blue.SetCrashKeyValues('GPU_DeviceId', str(adapterInfo.deviceID)) 94 blue.SetCrashKeyValues('trinityPlatform', platform) 95 try: 96 driverInfo = adapterInfo.GetDriverInfo() 97 blue.SetCrashKeyValues('GPU_Driver_Version', driverInfo.driverVersionString) 98 blue.SetCrashKeyValues('GPU_Driver_Date', driverInfo.driverDate) 99 blue.SetCrashKeyValues('GPU_Driver_Vendor', driverInfo.driverVendor) 100 blue.SetCrashKeyValues('GPU_Driver_Is_Optimus', 'Yes' if driverInfo.isOptimus else 'No') 101 blue.SetCrashKeyValues('GPU_Driver_Is_Amd_Switchable', 'Yes' if driverInfo.isAmdDynamicSwitchable else 'No') 102 except RuntimeError: 103 blue.SetCrashKeyValues('GPU_Driver_Version', str(adapterInfo.driverVersion)) 104 105 except RuntimeError: 106 pass 107 108 109 def IsFpsEnabled(): 110 return bool('FPS' in (j.name for j in renderJobs.recurring)) 111 112 113 def SetFpsEnabled(enable, viewPort = None): 114 if enable: 115 if IsFpsEnabled(): 116 return 117 fpsJob = CreateRenderJob('FPS') 118 fpsJob.SetViewport(viewPort) 119 fpsJob.RenderFps() 120 fpsJob.ScheduleRecurring(insertFront=False) 121 else: 122 renderJobs.UnscheduleByName('FPS') 123 124 125 def AddRenderJobText(text, x, y, renderJob, color = 4278255360L): 126 steps = [ step for step in renderJob.steps if step.name == 'RenderDebug' ] 127 if len(steps) > 0: 128 step = steps[0] 129 else: 130 return 131 step.Print2D(x, y, color, text) 132 return renderJob 133 134 135 def CreateDebugRenderJob(renderJobName, viewPort, renderJobIndex = -1): 136 renderJob = CreateRenderJob(renderJobName) 137 renderJob.SetViewport(viewPort) 138 step = renderJob.RenderDebug() 139 step.name = 'RenderDebug' 140 step.autoClear = False 141 if renderJobIndex is -1: 142 renderJob.ScheduleRecurring() 143 else: 144 renderJobs.recurring.insert(renderJobIndex, renderJob) 145 return renderJob 146 147 148 def SetupDefaultGraphs(): 149 graphs.Clear() 150 graphs.AddGraph('frameTime') 151 graphs.AddGraph('devicePresent') 152 graphs.AddGraph('primitiveCount') 153 graphs.AddGraph('batchCount') 154 graphs.AddGraph('pendingLoads') 155 graphs.AddGraph('pendingPrepares') 156 graphs.AddGraph('textureResBytes') 157 158 159 def AddFrameTimeMarker(name): 160 line = GetLineGraphFrameTime() 161 if line is not None: 162 line.AddMarker(name) 163 164 165 class FrameTimeMarkerStopwatch(object): 166 167 def __init__(self, stopwatchName): 168 self.started = blue.os.GetCycles()[0] 169 self.stopwatchName = stopwatchName 170 171 def __str__(self): 172 return '%s %i ms' % (self.stopwatchName, int(1000 * ((blue.os.GetCycles()[0] - self.started) / float(blue.os.GetCycles()[1])))) 173 174 def __del__(self): 175 AddFrameTimeMarker(str(self)) 176 177 178 def CreateBinding(cs, src, srcAttr, dst, dstAttr): 179 binding = TriValueBinding() 180 binding.sourceObject = src 181 binding.sourceAttribute = srcAttr 182 binding.destinationObject = dst 183 binding.destinationAttribute = dstAttr 184 if cs: 185 cs.bindings.append(binding) 186 return binding 187 188 189 def CreatePythonBinding(cs, src, srcAttr, dst, dstAttr): 190 binding = Tr2PyValueBinding() 191 binding.sourceObject = src 192 binding.sourceAttribute = srcAttr 193 binding.destinationObject = dst 194 binding.destinationAttribute = dstAttr 195 if cs: 196 cs.bindings.append(binding) 197 return binding 198 199 200 def _init(): 201 _StoreGPUInfoInCrashHeaders() 202 device.SetRenderJobs(renderJobs) 203 settings.SetValue('newBloom', False) 204 settings.SetValue('dynamicExposureQualityRequirement', 2) 205 settings.SetValue('grannyDeprecationLevel', 0) 206 207 208 _init()