小编Fre*_*man的帖子

在Retina iPad上使用CoreGraphics绘制图像很慢

在我的iPad应用程序中,我正在渲染到屏幕外的位图,然后将位图绘制到屏幕上.(这是因为我想重新使用现有的位图渲染代码.)在iPad 2上,这就像一个魅力,但在带有Retina显示屏的新iPad上,绘制位图非常慢,即使它的分辨率仍然是相同.

为了绘制位图,我们使用常规的Quartz 2D函数:CGImageCreate使用CGDataProviderCreateWithData32位RGBA格式创建的数据提供程序kCGImageAlphaNoneSkipLast.在UIView显示位图的中drawRect:,我们使用CGContextDrawImage它来将其绘制到返回的上下文中UIGraphicsGetCurrentContext.

请注意,我甚至没有尝试以双倍分辨率绘制:现在我的分辨率与我在iPad 2上使用的分辨率相同.看起来CoreGraphics在内部将像素加倍,然后将其发送到GPU即使CGImage我正在制作的内容应该可以直接传递给GPU.有任何想法吗?

performance core-graphics ipad retina-display

10
推荐指数
1
解决办法
4001
查看次数

在Windows x64上使用RtlAddFunctionTable描述动态生成的代码

我的应用程序(用Delphi编写,但这并不重要)动态生成代码块(它包含一个内置的编译器).为了让Windows x64上的异常正常工作,我需要通过描述生成的函数RtlAddFunctionTable.到目前为止,我已经将代码生成器更改为仅使用官方的prolog和epilog表单,并且我已经通过设置包含UNWIND_INFO等的RUNTIME_FUNCTION对它们进行了编码.

但是,生成的代码中的(故意)访问冲突仍会导致应用程序立即终止,因此显然出现了问题.使用windbg,我看到以下(0x4c5006f异常地址在哪里):

0:000> .fnent 0x4c5006f 
Debugger function entry 00000000`05436910 for:

BeginAddress      = 00000000`00000000 
EndAddress        = 00000000`00000097
UnwindInfoAddress = 00000000`000000a0
Run Code Online (Sandbox Code Playgroud)

但是,它不会在此下方打印展开信息.我可以从内存窗口看到它:

00000000`04c50000 53 56 57 55 41 54 41 55 41 56 41 57 48 83 ec 08  SVWUATAUAVAWH...
00000000`04c50010 49 89 ce 9b db e3 9b d9 3c 24 41 d9 ae e4 00 00  I.......<$A.....
00000000`04c50020 00 0f ae 5c 24 04 4c 89 f0 0f ae 90 e0 00 00 00 …
Run Code Online (Sandbox Code Playgroud)

windows delphi 64-bit winapi exception-handling

10
推荐指数
1
解决办法
585
查看次数

将多个OpenGL窗口同步到vsync

在Windows应用程序中,我同时打开了多个OpenGL窗口.理想情况下,我希望每个以60 fps绘制,同步到屏幕刷新.

对于每个渲染上下文,我打电话wglSwapIntervalEXT(1)打开vsync.每个窗口都有自己的显示线程,它绘制帧然后调用SwapBuffers更新.

事实证明,窗户彼此"战斗":看起来SwapBuffers呼叫是同步的并且彼此等待,即使它们在不同的线程中.我正在测量每个窗口的帧到帧时间,并且有两个窗口,这下降到30 fps,有3到20 fps等.

如果我关闭vsync wglSwapIntervalEXT(0),无论我打开多少个窗口,他们都会以60 fps快速刷新.但是打开一个窗口时,这并不像打开vsync那样平滑.

有没有办法用OpenGL完成我想要的东西?

windows opengl multithreading vsync

9
推荐指数
1
解决办法
1763
查看次数

适用于Windows的CVDisplayLink替代方案?

在Mac OS X上,CVDisplayLink提供了一种可靠地更新屏幕以实现60 fps动画而不会撕裂的好方法.Windows上是否有类似的界面,与OpenGL兼容?

当然可以在等待vsync时阻塞,但是这不能扩展为需要同时进行动画处理的多个窗口.在Windows上,它们都会互相等待(所以每个等待vsync的窗口都会降低到30 fps),这与OS X不同.

例如视频播放器如何实现平滑的屏幕更新?

windows opengl macos animation vsync

6
推荐指数
1
解决办法
672
查看次数

视网膜屏幕上的IKImageBrowserView

有没有人成功使用IKImageBrowserView过Retina Mac?我得到的是图像大小被误解了.以前我使用的CGImage是没有逻辑大小的图像,因此浏览器无法以正确的大小绘制.但是,我已切换到NSImage,使用创建-initWithCGImage:size:,但仍然无法正常工作.

我的图像是244x184像素,应该以122x92的逻辑大小绘制.当传递122x92作为大小时,它们被绘制得太大,大约180像素宽.如果我通过正好一半,61x46,大小是正确的,但图像看起来缩小,而不是锐利.如果我通过122x92并在Info.plist中使用NSHighResolutionCapableset 运行NO,则一切正常.

我的结论是,IKImageBrowserView即使使用运行OS X 10.11的Retina MacBook Pro上的10.10 SDK也不兼容Retina.或者我错过了什么?任何指针将不胜感激!

macos cocoa ikimagebrowserview retina-display

6
推荐指数
1
解决办法
77
查看次数

Firefox或Safari不会重新加载样式表图像

我们发现Firefox(至少v3)和Safari没有正确缓存从css文件引用的图像.图像被缓存,但即使您在服务器上更改它们,它们也永远不会刷新.一旦Firefox将图像放入缓存中,它将永远不会检查它是否已更改.

我们的css文件如下所示:

div#news {
  background: #FFFFFF url(images/newsitem_background.jpg) no-repeat;
  ...
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我们现在更改newsitem_background.jpg图像,所有Firefox用户仍将获得旧图像,除非他们明确刷新页面.另一方面,IE检测到图像已更改并自动重新加载.

这是一个已知的问题吗?任何解决方法?谢谢!

编辑:解决方案不是按F5.我可以做这个.但我们的客户只会访问我们的网站,并获得旧的,过时的图形.他们怎么知道他们需要按F5?

我已经安装了Firebug并确认了我已经怀疑的内容:Firefox甚至没有尝试检索从css文件引用的图像,以确定它们是否已被更改.当您按F5时,它会检查所有图像,并且Web服务器会很好地响应304,除了已经更改的那些,它以200 OK响应.

那么,有没有办法敦促Firefox 自动更新从css文件引用的图像?当然我不是唯一有这个问题的人吗?

EDIT2:我用localhost测试了这个,图像响应不包含任何缓存信息,它是:

Server  Microsoft-IIS/5.1
X-Powered-By    ASP.NET
Date    Tue, 14 Oct 2008 11:01:27 GMT
Content-Type    image/jpeg
Accept-Ranges   bytes
Last-Modified   Tue, 14 Oct 2008 11:00:43 GMT
Etag    "7ab3aa1aec2dc91:9f4"
Content-Length  61196
Run Code Online (Sandbox Code Playgroud)

编辑3:我已经做了一些阅读,看起来它无法修复,因为Firefox或大多数浏览器只会假设图像不会经常更改(过期标题和所有).

css safari firefox firefox-3

5
推荐指数
1
解决办法
3244
查看次数

Delphi XE2用于项目经理的工具栏是什么?

在我自己的项目中,我想使用Delphi XE2 IDE用于项目管理器的相同类型的工具栏:带有图标和显示每个图标标题的选项.我不需要拖/停功能.Delphi XE2中是否有标准组件可以实现这一目标?

谢谢!

delphi toolbar delphi-xe2

4
推荐指数
1
解决办法
364
查看次数

在Windows 8上声明每个窗口的高DPI感知

我正在开发在诸如Cubase之类的主机中运行的音频插件,我正在寻求添加高DPI支持.这是有问题的,因为我所知道的所有主机应用程序都声明自己具有非高DPI感知能力,因此所有窗口都由DWM自动缩放.我正在寻找一种方法来关闭插件窗口的DWM DPI缩放,即使主机本身不支持DPI(因此它对所有其他窗口使用DWM DPI缩放).有谁知道这是否可行?

对于使用大量插件的应用程序,例如音频主机,这是一个非常现实的问题,因为它们不能继续并声明自己是高DPI意识:这会破坏所有现有的插件.因此,除非Windows为此提供解决方案,否则我们总是停留在96 dpi的土地上.基本上我认为我们需要一个比设置每个进程更精细的解决方案,因此主机和插件可以单独声明其感知级别.

如果目前无法完成,是否有办法联系Microsoft工程师,以便将其添加到Windows的未来版本?

windows winapi dpi windows-8.1 dpi-aware

4
推荐指数
1
解决办法
1226
查看次数

Visual C++ 2008和2005之间的区别

我在微软的网站上找不到任何有用的信息,所以这里有一个问题:自2005年版以来,Visual C++ 2008中的编译器是否得到了显着的改进?我特别想寻找更好的优化.

c++ compiler-construction visual-studio-2005 visual-studio-2008 visual-studio

2
推荐指数
1
解决办法
4865
查看次数