标签: video-card

在iOS上,CALayer位图(CGImage对象)如何显示在图形卡上?

在iOS上,我能够创建3个CGImage对象,并使用CADisplayLink60fps来完成

self.view.layer.contents = (__bridge id) imageArray[counter++ % 3];
Run Code Online (Sandbox Code Playgroud)

ViewController每个时间内,图像被设置为视图的CALayer contents,这是一个位图.

而这一切本身都可以改变屏幕显示的内容.屏幕将以60fps循环显示这3张图像.没有的UIView的drawRect,没有任何的CALayer的display,drawInContext或CALayer的的委托的drawLayerInContext.它只是改变CALayer的contents.

我还尝试添加一个较小尺寸的子图层self.view.layer,并设置该子图层contents.该子图层将循环显示这3个图像.

所以这与过去甚至在Apple上的情况非常类似[甚至在King's Quest III时代,这是DOS视频游戏,其中有1个位图,屏幕只是不断显示位图是什么.

除此之外,它不是1位图,而是树或位图的链表,并且图形卡不断使用Painter的模型将这些位图(具有位置和不透明度)绘制到主屏幕上.所以看起来drawRect,CALayer,所有东西,都是为了实现这个最终目的而设计的.

它是如何工作的?显卡是否采用有序的位图列表或位图树?(然后不断地展示它们.为简化起见,我们不考虑CA框架中的隐式动画)图形卡处理层实际发生了什么?(实际上,这种方法在iOS,Mac OS X和PC上几乎相同吗?)

(这个问题的目的是了解我们的图形编程如何在现代图形卡中实现渲染,例如,如果我们需要了解UIView以及CALayer如何工作,甚至直接使用CALayer的位图,我们确实需要了解图形架构.)

graphics video-card calayer uiview ios

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

桌面复制 API 和可切换显卡

问题:当您在具有可切换显卡的计算机上使用独立显卡控制器运行应用程序时,调用IDXGIOutput1::DuplicateOutput 方法会返回 DXGI_ERROR_UNSUPPORTED。

这个答案让我们对这个问题有了一些了解。简而言之,独立显卡仅渲染屏幕的一部分,并将数据发送到集成图形控制器的帧缓冲区——换句话说,所有输出始终通过集成图形控制器。看来这就是 DuplicateOutput 返回 DXGI_ERROR_UNSUPPORTED 的原因。

我编写了一个示例,使用winapiEnumDisplayDevices 函数)和directxIDXGIFactory::EnumAdapters 方法IDXGIAdapter::EnumOutputs 方法)获取所有输出及其视频适配器,以在具有可切换显卡(Intel HD 4600 和 NVIDIA 840M)的计算机上进行比较。这是结果:

在此输入图像描述

不确定我的比较有多正确,但是你可以看到winapi说 DISPLAY1 属于 Intel 卡,而directx说 DISPLAY1 属于 NVIDIA 卡。一种解决方案是复制 Intel 卡的输出(因为一切都经过它),但 EnumOutputs 不返回任何输出。

目前有一个解决方法:始终使用集成图形控制器运行使用复制 API 的应用程序。

问题:如何使 DuplicateOutput 与具有可切换显卡的笔记本电脑上的独立显卡控制器配合使用?或者这是桌面复制 API 的限制?

directx screen-capture video-card dxgi

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

使用标准VGA图形在机器上模拟OpenGL

因此,我们有一个小图形doohickey需要在没有真正视频卡的服务器环境中运行.它真正需要的是帧缓冲对象,也许还有一些矢量/字体抗锯齿.我知道,它会很慢.它只需要输出单帧.

我看到这篇关于如何强制软件渲染模式的文章,但它似乎适用于已经有OpenGL卡的机器(如NVidia).

所以,由于担心尝试在三个时区的机器上安装OpenGL,并且有一堆现场制作网站 - 有没有人尝试过这个和/或知道如何"模仿"一个OpenGL环境?不幸的是我们的开发服务器有一个视频卡,所以我无法真正展示"我尝试过的东西".

相关代码全部都在Cinder中,但我认为我们的实际OpenGL利用率很轻.

这将在Windows Server 2008 Standard上运行

我看到MS有一个OGL 1.1 的软件实现,但似乎找不到2.0

windows opengl emulation video-card

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

与 PCI Express 插槽传输速率相关的 GPU 带宽说明 (v1.x - x16)

只需要澄清与 PCI Express 传输速率相关的 GPU 带宽。它将帮助我了解显卡的实际工作原理...

所以要计算带宽:

Memory Speed x Bus Width / 8 = Bandwidth (B/s)
Run Code Online (Sandbox Code Playgroud)

因此,如果我的显卡在 GDDR3 上的总线宽度为 256 位且内存速度为 900MHz:

Bandwidth = 900MHz * 256 / 8 = 28GB/s (28GB/s * 2 = 57GB/s because GDDR3 is double data rate)
Run Code Online (Sandbox Code Playgroud)

PCI Express v1.0 上的单通道传输速率为 250MB/s,因此 16 通道将是 4GB/s。

令我困惑的是,接口(PCIe)的传输速率为 4GB/s,而显卡的传输速率为 57GB/s。

问:那么这会不会因为接口只能传输4GB/s而造成瓶颈?

gpu data-transfer bandwidth video-card memory-bandwidth

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

创建新的openGL版本的过程?

在阅读了这本在线书籍http://learnopengl.com/book/offline%20learnopengl.pdf之后,我脑子里开始出现一些关于如何创建更新版本的openGL的问题.根据在线阅读,显卡制造商负责创建更新版本的openGL.所以说Nvidia开发(假设)一个带有openGL版本4.3的GTX 700系列显卡.在此之后,他们决定开发900系列显卡,并对openGL的实现进行一些优化.在卡完成并进行优化后,他们将openGL的这些新优化标记为openGL 4.4.我的示例在新版本的创建方面是否正确?另外,如果是这样,那么kronos组(openGL的开发人员)实际上做了什么?他们是否有责任确保新版本的openGL符合所需规格?

opengl 3d graphics nvidia video-card

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