This shows you the differences between two versions of the page.
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`。 | ||