Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
component:gpu:zh [2023/12/17 10:59]
hfsr [资源配额与能耗]
component:gpu:zh [2023/12/27 02:03] (current)
hfsr [资源配额与能耗]
Line 134: Line 134:
 ----------- -----------
  
-对显存的更新操作(set、copy和fill等)几乎没有消耗。这些操作不会耗能,也不会额外消耗资源。每次直接组件调用(GPU方法即为直接调用)都只消耗很少的系统资源配额,但是GPU本身在显存更新操作中不会增加资源消耗。将显存传输到屏幕时会有一定的资源消耗,类似于屏幕更新时产生的资源消耗。传输脏的(修改过的)显存后备缓冲区需要一次性消耗一定的资源,消耗的量随源缓冲区的大小而增加。而后续从干净的后备缓冲区到屏幕的传输只需要消耗极少的资源。+对显存的更新操作(set、copy和fill等)几乎没有消耗。这些操作不会耗能,也不会额外消耗资源配额。每次直接组件调用(GPU方法即为直接调用)都只消耗很少的系统资源配额,但是GPU本身在显存更新操作中不会增加资源消耗。将显存传输到屏幕时会有一定的资源消耗,类似于屏幕更新时产生的资源消耗。传输脏的(修改过的)显存后备缓冲区需要一次性消耗一定的资源,消耗的量随源缓冲区的大小而增加。而后续从干净的后备缓冲区到屏幕的传输只需要消耗极少的资源。
  
 - `getActiveBuffer():​ number`  ​ - `getActiveBuffer():​ number`  ​
-  返回当前选中缓冲区的编号。0被保留给屏幕,且就算没有屏幕也有可能会返回0。+  返回当前选中缓冲区的编号。0被保留给屏幕,且就算没有屏幕也有可能会返回0。 ​  
 +\\
 - `setActiveBuffer(index:​ number): number`  ​ - `setActiveBuffer(index:​ number): number`  ​
-  将活动缓冲区设定为`index`。0被保留给屏幕,且就算没有屏幕也可以设定。若编号无效则返回`nil`(0就算在没有屏幕的情况下也有效)。+  将活动缓冲区设定为`index`。0被保留给屏幕,且就算没有屏幕也可以设定。若编号无效则返回`nil`(0就算在没有屏幕的情况下也有效)。 ​  
 +\\
 - `buffers(): table`  ​ - `buffers(): table`  ​
-  返回包含当前所有页编号的数组(列表中不包含0,此编号保留给屏幕)。+  返回包含当前所有页编号的数组(列表中不包含0,此编号保留给屏幕)。 ​  
 +\\
 - `allocateBuffer([width:​ number, height: number]): number`  ​ - `allocateBuffer([width:​ number, height: number]): number`  ​
-  分配一个大小为`width`x`height`的新页(默认大小为GPU的最大分辨率)。返回此缓冲区的编号,若剩余显存不足则报错。即使GPU未绑定到屏幕也可以分配缓冲区。编号0永久保留给屏幕,因此分配出的缓冲区的编号最小从1开始。+  分配一个大小为`width`x`height`的新页(默认大小为GPU的最大分辨率)。返回此缓冲区的编号,若剩余显存不足则报错。即使GPU未绑定到屏幕也可以分配缓冲区。编号0永久保留给屏幕,因此分配缓冲区的编号最小从1开始。 ​  
 +\\
 - `freeBuffer([index:​ number]): boolean`  ​ - `freeBuffer([index:​ number]): boolean`  ​
-  移除编号为`index`(默认为当前缓冲区编号)的缓冲区。若成功移除此缓冲区则返回`true`。如果你移除了当前选中的缓冲区,GPU会自动切换回编号0(为屏幕保留)。+  移除编号为`index`(默认为当前缓冲区编号)的缓冲区。若成功移除此缓冲区则返回`true`。如果你移除了当前选中的缓冲区,GPU会自动切换回编号0(为屏幕保留)。 ​  
 +\\
 - `freeAllBuffers()`  ​ - `freeAllBuffers()`  ​
-   ​移除全部缓冲区,释放所有显存。在调用此函数后活动缓冲区编号一定为0。+   ​移除全部缓冲区,释放所有显存。在调用此函数后活动缓冲区编号一定为0。 ​  
 + \\
 - `totalMemory():​ number`  ​ - `totalMemory():​ number`  ​
-  返回GPU的显存总量。此值不包括屏幕。+  返回GPU的显存总量。此值不包括屏幕。 ​  
 +\\
 - `freeMemory():​ number`  ​ - `freeMemory():​ number`  ​
-  返回未分配给缓冲区的空闲显存总量。此值不包括屏幕。+  返回未分配给缓冲区的空闲显存总量。此值不包括屏幕。 ​  
 +\\
 - `getBufferSize([index:​ number]): number, number`  ​ - `getBufferSize([index:​ number]): number, number`  ​
-  返回编号为`index`(默认为当前缓冲区编号的缓冲区的大小。若编号为0则返回屏幕的分辨率。若编号无效则返回`nil`。+  返回编号为`index`的缓冲区(默认为当前缓冲区)的大小。若编号为0则返回屏幕的分辨率。若编号无效则返回`nil`。 ​  
 +\\
 - `bitblt([dst:​ number, col: number, row: number, width: number, height: number, src: number, fromCol: number, fromRow: number])`  ​ - `bitblt([dst:​ number, col: number, row: number, width: number, height: number, src: number, fromCol: number, fromRow: number])`  ​
   将一个矩形区域从缓冲区复制到缓冲区,从屏幕复制到缓冲区或从缓冲区复制到屏幕。  ​   将一个矩形区域从缓冲区复制到缓冲区,从屏幕复制到缓冲区或从缓冲区复制到屏幕。  ​
Line 162: Line 171:
   * src = 当前缓冲区   * src = 当前缓冲区
   * fromCol, fromRow = 1,​1  ​   * fromCol, fromRow = 1,​1  ​
-  bitblt(位块传输)函数在反复调用时应当执行得很快。若缓冲区是脏的,那么与目标对象同步缓冲区的初始成本会更高。如果你需要大量进行更新,导致频繁进行位块传输,那么可以考虑分配数量多而尺寸小的缓冲区。如果你希望使用一个静态缓冲区(很少或不进行更新),那么分配大的缓冲区即可。  ​+  bitblt(位块传输)在反复进行时应当执行得很快。若缓冲区是脏的,那么与目标对象同步缓冲区的初始成本会更高。如果你需要大量进行更新,导致频繁进行位块传输,那么可以考虑分配数量多而尺寸小的缓冲区。如果你希望使用一个静态缓冲区(很少或不进行更新),那么分配大的缓冲区即可。  ​
   操作成功后会返回`true`。   操作成功后会返回`true`。