- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在寻求实现一个管理 blit 队列的模块。有一个表面,该表面的部分(由矩形包围)被复制到表面内的其他地方:
add_blt(rect src, point dst);
可以有任意数量的操作按顺序发布到队列中。最终,队列的用户将停止发送 blits,并要求一组最佳操作以在表面上实际执行。该模块的任务是确保没有像素被不必要地复制。
当然,由于重叠,这变得棘手。 blit 可以重新 blit 先前复制的像素。理想情况下,blit 操作将在优化阶段进行 segmentation ,这样每个 block 都可以通过单个操作到达其最终位置。
把它们放在一起很棘手,但并非不可能。我只是不想重新发明轮子。
我在网上四处查看,唯一找到的是 SDL_BlitPool Library它假设源表面与目的地不同。它还会做很多看似不必要的繁重工作:区域和类似的构建 block 是给定的。我正在寻找更高层次的东西。当然,我不会在嘴里看礼物马,我也不介意做实际工作......如果有人能提出一个基本的想法,让这个问题看起来不像实际那么复杂现在,那也很棒。
编辑:
考虑 aaronasterling 的回答……这行得通吗?
实现自定义区域处理程序代码,可以维护它包含的每个矩形的元数据。当区域处理程序拆分一个矩形时,它会自动将此矩形的元数据与生成的子矩形相关联。
优化运行开始时,创建一个由上述自定义代码处理的空区域,将其称为主区域
遍历 blt
队列,对于每个条目:
让 srcrect
成为被检查的 blt
的源矩形
获取srcrect
和master region
的交集到temp region
从master region
中移除temp region
,因此master region
不再覆盖temp region
将 srcrect
提升到一个区域 (srcrgn
) 并从中减去 temp region
用当前blt
的 vector 偏移temp region
和srcrgn
:它们的并集将覆盖当前的目标区域blt
添加到 master region
temp region
中的所有 rect,保留原始源元数据(第一步添加当前 blt
到 master 区域
)
Add to master region
all rects in srcrgn
,添加当前blt
的源信息(第二步添加当前 blt
到 master 区域
)
通过检查作为合并候选的相邻子矩形是否具有相同的元数据来优化 master region
。如果 (r1.x1 == r2.x1 && r1.x2 == r2.x2) | 两个子矩形是合并候选者(r1.y1 == r2.y1 && r1.y2 == r2.y2)
。如果是,将它们合并。
枚举主区域
的子矩形。返回的每个矩形都是优化的 blt 操作目标。关联的元数据是 blt 操作的来源。
最佳答案
我想到的一个想法是将要添加的矩形的定义点存储在四叉树中(或其他一些能够实现高效碰撞检测的结构)。所以现在当你添加一个新的矩形时,你可以测试它是否有碰撞。这个想法是,当一个新矩形与一个旧矩形发生碰撞时,您可以通过将旧矩形分成 4、3 或 2 个新矩形来解决冲突,这些新矩形不包括与新添加的矩形相交的部分。我们知道旧矩形不与任何其他旧矩形相交,因此,因为新创建的矩形包含在其中,我们知道它们也不相交,因此您不必对它们执行碰撞检测。
例如,开始于:
并添加一个矩形:
将解决:
在这里,一个旧矩形被分成两个新矩形,另一个被分成三个。
这保证了在添加一个新的矩形后,队列始终处于没有交集的状态,这意味着复制这些矩形不会复制一个像素两次。
关于c++ - Blit 队列优化算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4529170/
我遇到一种情况,我需要从某个主题读取(正在进行的)消息并将它们放入另一个 Queue 中。我怀疑我是否需要 jms Queue 或者我可以对内存中的 java Queue 感到满意。我将通过同一 jv
队列的定义 队列(Queue):先进先出的线性表 队列是仅在队尾进行插入和队头进行删除操作的线性表 队头(front):线性表的表头端,即可删除端 队尾(rear):线性表的表尾端,即可插入端 由于这
Redis专题-队列 首先,想一想 Redis 适合做消息队列吗? 1、消息队列的消息存取需求是什么?redis中的解决方案是什么? 无非就是下面这几点: 0、数据可以顺序读
0. 学习目标 栈和队列是在程序设计中常见的数据类型,从数据结构的角度来讲,栈和队列也是线性表,是操作受限的线性表,它们的基本操作是线性表操作的子集,但从数据类型的角度来讲,它们与线性表又有着巨大的不
我想在 redis + Flask 和 Python 中实现一个队列。我已经用 RQ 实现了这样的查询,如果你有 Flask 应用程序和任务在同一台服务器上工作,它就可以正常工作。我想知道是否有可能创
我正在使用 Laravel 5.1,我有一个大约需要 2 分钟来处理的任务,这个任务特别是生成报告...... 现在,很明显,我不能让用户在我接受用户输入的同一页面上等待 2 分钟,而是我应该在后台处
我正在使用 Azure 队列,并且有多个不同的进程从队列中读取数据。 我的系统的构建方式假设每条消息只读取一次。 这个Microsoft article声称 Azure 队列具有至少一次传送保证,这可
我正在创建一个Thread::Queue元素数组。 我这样做是这样的: for (my $i=0; $i new; } 但是,当我在每个队列中填充这样的元素时 $queues[$index]->enq
我试图了解如何将我的 Mercurial 补丁推送到远程存储库(例如 bitbucket.org),而不必先应用它们(实际上提交它们)。我的动机是在最终完成之前首先对我的工作进行远程备份,并且能够与其
我的本地计算机上有一个 Mercurial 队列补丁,我需要与同事共享该补丁,但我不想将其提交到上游存储库。有没有一种简单的方法可以打包该补丁并与他分享? 最佳答案 mq 将补丁作为不带扩展名的文
Java 中是否有任何类提供与 Queue 相同的功能,但有返回对象的选项,并且不要删除它,只需将其设置在集合末尾? 最佳答案 Queue不直接提供这样的方法。但是,您可以使用 poll 和 add
我在Windows上使用Tortoise svn客户端,我需要能够一次提交来自不同子文件夹的更改文件-一次提交。像在提交之前将文件添加到队列中之类的?我该怎么做? Windows上是否还有另一个svn
好吧,我正在尝试对我的 DSAQueue 类进行单元测试,它显示我的 isEmpty()、isFull() 和 dequeue() 方法失败。 以下是我的 DSAQueue 代码。我认为我的 Dequ
我想尽量减少对传入请求的数据库查询。它目前需要写入 6 个不同的表。在返回响应之前不需要完成处理。因此,我考虑了 laravel 队列,但我想知道我是否也可以摆脱写入队列/作业表所需的单独查询。我可以
我正在学习队列数据结构。我想用链表创建队列。我想编程输出:10 20程序输出:队列为空-1 队列为空-1 我哪里出错了? 代码如下: class Node { int x; Node next
“当工作人员有空时,他们会根据主题的优先级列表从等待请求池中进行选择。在时间 t 到达的所有请求都可以在时间 t 进行分配。如果两名工作人员同时有空,则安排优先权分配给最近的工作最早安排的人。如果仍然
我正在开发一个巨大的应用程序,它使用一些子菜单、模式窗口、提示等。 现在,我想知道在此类应用程序中处理 Esc 和单击外部事件的正确方法。 $(document).keyup(function(e)
所以 如果我有一个队列 a --> b --> NULL; 当我使用函数时 void duplicate(QueueNodePtr pHead, QueueNodePtr *pTail) 它会给 a
我正在尝试为键盘输入实现 FIFO 队列,但似乎无法让它工作。我可以让键盘输入显示在液晶显示屏上,但这就是我能做的。我认为代码应该读取键盘输入并将其插入队列,然后弹出键盘输入并将值读取到液晶屏幕上。有
我正在学习算法和 DS。如何在 JavaScript 中使用队列? 我知道你可以做这样的事情。 var stack = []; stack.push(2); // stack is now
我是一名优秀的程序员,十分优秀!