NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

bitmapjob.py (3816B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\bitmapjob.py
      2 import trinity
      3 import blue
      4 
      5 def makeBitmapStep(filePath, scaleToFit = True, color = (1.0, 1.0, 1.0, 1.0), targetSize = None):
      6     tex = trinity.TriTextureParameter()
      7     tex.name = 'Texture'
      8     tex.resourcePath = filePath
      9     if targetSize is None:
     10         bb = trinity.device.GetRenderContext().GetDefaultBackBuffer()
     11         targetSize = (bb.width, bb.height)
     12     fx = trinity.Tr2Effect()
     13     fx.effectFilePath = 'res:/Graphics/Effect/Managed/Space/System/ColoredBlit.fx'
     14     fx.resources.append(tex)
     15     while tex.resource.isLoading:
     16         blue.synchro.Yield()
     17 
     18     sw = float(tex.resource.width)
     19     sh = float(tex.resource.height)
     20     tw = float(targetSize[0])
     21     th = float(targetSize[1])
     22     v = trinity.Tr2Vector4Parameter()
     23     v.name = 'Color'
     24     v.value = color
     25     fx.parameters.append(v)
     26     v = trinity.Tr2Vector4Parameter()
     27     v.name = 'SourceUVs'
     28     fx.parameters.append(v)
     29     sourceAspect = sw / sh
     30     targetAspect = tw / th
     31     if scaleToFit:
     32         if targetAspect > sourceAspect:
     33             span = targetAspect / sourceAspect
     34             v.value = (0.5 - 0.5 * span,
     35              0.0,
     36              0.5 + 0.5 * span,
     37              1.0)
     38         else:
     39             span = sourceAspect / targetAspect
     40             v.value = (0,
     41              0.5 - 0.5 * span,
     42              1.0,
     43              0.5 + 0.5 * span)
     44     elif targetAspect > sourceAspect:
     45         d = 1.0 - sw * th / (sh * tw)
     46         d *= 0.5
     47         v.value = (0.0,
     48          d,
     49          1.0,
     50          1.0 - d)
     51     else:
     52         d = 1.0 - tw * sh / (th * sw)
     53         d *= 0.5
     54         v.value = (d,
     55          0.0,
     56          1.0 - d,
     57          1.0)
     58     return trinity.TriStepRenderEffect(fx)
     59 
     60 
     61 def addBitmapRenderJob(filePath, scaleToFit = True, color = (1.0, 1.0, 1.0, 1.0), targetSize = None):
     62     rj = trinity.CreateRenderJob('Background bitmap')
     63     step = makeBitmapStep(filePath, scaleToFit=scaleToFit, color=color, targetSize=targetSize)
     64     rj.steps.append(step)
     65     rj.ScheduleRecurring()
     66 
     67 
     68 def makeCubemapStep(filePath, scaleToFit = True, color = (1.0, 1.0, 1.0, 1.0), cubeFace = 0, targetSize = None):
     69     tex = trinity.TriTextureParameter()
     70     tex.name = 'BlitSource'
     71     tex.resourcePath = filePath
     72     if targetSize is None:
     73         bb = trinity.device.GetRenderContext().GetDefaultBackBuffer()
     74         targetSize = (bb.width, bb.height)
     75     targetAspect = float(targetSize[0]) / float(targetSize[1])
     76     fx = trinity.Tr2Effect()
     77     fx.effectFilePath = 'res:/Graphics/Effect/Managed/Space/System/ColoredBlitCube.fx'
     78     fx.effectResource.Reload()
     79     fx.resources.append(tex)
     80     v = trinity.Tr2Vector4Parameter()
     81     v.name = 'Color'
     82     v.value = color
     83     fx.parameters.append(v)
     84     v = trinity.Tr2FloatParameter()
     85     v.name = 'cubeFace'
     86     v.value = cubeFace
     87     fx.parameters.append(v)
     88     v = trinity.Tr2Vector4Parameter()
     89     v.name = 'ScaleXY'
     90     fx.parameters.append(v)
     91     if scaleToFit:
     92         if targetAspect >= 1.0:
     93             v.value = (targetAspect,
     94              1.0,
     95              1.0,
     96              1.0)
     97         else:
     98             v.value = (1.0,
     99              1.0 / targetAspect,
    100              1.0,
    101              1.0)
    102     elif targetAspect < 1.0:
    103         v.value = (targetAspect,
    104          1.0,
    105          1.0,
    106          1.0)
    107     else:
    108         v.value = (1.0,
    109          1.0 / targetAspect,
    110          1.0,
    111          1.0)
    112     return trinity.TriStepRenderEffect(fx)
    113 
    114 
    115 def addCubemapRenderJob(filePath, scaleToFit = True, color = (1.0, 1.0, 1.0, 1.0), cubeFace = 0, targetSize = None):
    116     rj = trinity.CreateRenderJob('Background cubemap')
    117     step = makeCubemapStep(filePath, scaleToFit=scaleToFit, color=color, cubeFace=cubeFace, targetSize=targetSize)
    118     rj.steps.append(step)
    119     rj.ScheduleRecurring()