问题标签 [direct3d9]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - 在 Direct3D 9 中转到窗口模式
我正在制作一个 Direct3D 应用程序,我可以使用IDirect3DDevice9::Reset
新的演示参数轻松地从窗口模式转到全屏模式。但是,当我使用相同的技巧从全屏模式转到窗口模式时,窗口现在失去了边框。
如果我尝试SetWindowLong
将窗口样式设置为WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
(然后SetWindowPos
使用SWP_FRAMECHANGED
),则窗口现在获得其边框,但 direct3d 设备不再工作。再次重置设备不起作用,而不是再次重置,Reset(),
当然会失败,因为我的托管资源依赖于我的设备。Release()
SetWindowLong()
CreateDevice()
如何IDirect3DDevice9::Reset
在创建带边框的窗口时返回窗口模式?
com - 为什么 IDirect3DDevice9::Release 会返回 S_FALSE?
当我为我的 Direct3D9 设备调用 Release 方法时,它返回 S_FALSE 但我找不到任何解释为什么会返回此值的任何内容。
据我所知, S_FALSE 意味着它已经成功但不需要做任何事情,但我只释放一次。
我也不认为该方法确实成功,因为即使在窗口被破坏并且设备被释放后,我也留下了一个全屏 DirectX 窗口。
directx - 将视频渲染到 Direct3D 9.0c 纹理
我一直在尝试在我的 Direct3D 应用程序中播放视频,并且一直在 DirectShow 的帮助下尝试这样做。我的问题是我找不到如何将帧数据放入纹理中(ISampleGrabber 不会安装)。
有谁知道这样做的任何方法或例子?
direct3d9 - 我可以运行多个并行 ID3DXRenderToSurface 吗?
是否可以创建多个 ID3DXRenderToSurface 实例并让它们在线程中并行渲染?这似乎不太可能,但由于 DirectX 的某些方面对我来说仍然有些令人难以置信,我想我会问。
如果做不到也没什么大不了的。只是我正在处理的应用程序(不幸的是)将其对象渲染拆分为渲染到表面的组,然后将完成的表面渲染到后台缓冲区。我只是想,如果可能的话,我可以让所有组并行而不是串行渲染,那会很好。
c++ - 如何从“正常”IDirect3D9Surface 获得屏幕外平面
我正在与 Media Foundation 合作开发媒体播放器。我正在尝试使用 DXVA-HD 进行后期处理。但是,当我尝试使用 HD 设备执行 VideoProcessBltHD 时,它会因 E_INVALIDARGS 而失败。我怀疑它不能以某种方式与我作为输入提供的 ID39Surface 正常工作。我从“IMFMediaBuffer”(我从 SourceReader 读取样本中获得)获取输入表面。
我按如下方式提取表面: CHECK_HR (hr = MFGetService( video_buffer, MR_BUFFER_SERVICE, __uuidof(IDirect3DSurface9), (void**)&pSurface) );
但是,在MSDN 上的 DXVA-HD 示例中,VideoProcessBltHD 工作正常。
而示例代码中的 IDirect3DSurface9 表面是屏幕外平面表面。如何将“我的表面”(具有视频数据)作为屏幕外平面表面传递给视频处理器并获得“blt 操作”成功?
任何帮助,将不胜感激。
谢谢莫茨
2d - 缓冲 direct3d 绘制操作
问题是 2D 特定的。
我是一个不断更新的纹理,它是我的一个图层的渲染目标。更新是对纹理的整体重绘,通过绘制精灵和输出文本来执行。该操作执行频繁,消耗大量 CPU,当然,我优化了重绘次数以降低它。
有没有办法在 Direct3D 中缓冲这些操作?因为目前我必须重复构建一个精灵/文本操作链。让我们假设任何执行世界更新的游戏 - 他们如何克服这项繁琐的工作?也许通过创建更多层?
对我来说最好的事情是创建一个可修改的绘制链对象,但我在 Direct3D 中没有找到类似的东西。
c++ - 动态传递 direct3d 着色器参数
我想通过动态更改偏移参数来更改亮度和对比度着色器,但我不想每次更改着色器缓冲区时都重新编译着色器。
当前的着色器代码是
我怎样才能动态地传递offsetBrightness
和offsetContrast
?
fullscreen - 多个 Direct3D 9 设备和 Alt-tabbing
我有一个应用程序可以在全屏模式下创建 Direct3D 9 设备,然后开始演示。稍后,在创建了第一个设备之后,我暂时在窗口模式下创建了一个新的 Direct3D 设备(在同一线程上,但用于不同的窗口)。我再次立即销毁此设备,但不知何故,我不再能够将 Alt-tab 退出全屏应用程序。该应用程序只是停留在顶部而不是掉到后台,尽管看起来该应用程序不再是焦点。
如果我将我的临时设备创建为 D3DDEVTYPE_NULLREF,我突然可以使用 Alt-tab 退出。有谁知道为什么会这样,如果是这样,我如何在不破坏现有设备的情况下创建第二个临时设备?
directshow - IMediaSample(DirectShow) 到 IDirect3DSurface9/IMFSample(MediaFoundation)
我正在开发自定义视频播放器。我在我的架构中使用了 DirectShow/Media Foundation 的组合。基本上,我使用 DS 来抓取 VOB 帧(MF 不支持)。我能够从 DirectShow 获得一个样本,但一直坚持将其传递给渲染器。在 MF 中,我得到了一个 Direct3DSurface9(来自 IMFSample),并使用 IDirect3D9Device 将它呈现在后台缓冲区中。
使用 DirectShow,我将 IMediaSample 作为我的数据缓冲区对象。我不知道如何转换并将其作为 IMFSample 传递。我发现其他人从示例中获取位图信息并使用 GDI+ 进行渲染。但我的视频数据可能并不总是有 RGB 数据。我希望从 IMediaSample 获得 IDirect3DSurface9 或 IMFSample 并将其传递给渲染,这样我就不必为色彩空间转换而烦恼了。
我是新手。如果我错了,请纠正我。谢谢
c++ - 使用视频解码加速调试 Direct3D 应用程序失败
我正在使用 DXVA2 开发视频播放器。在尝试调试 Direct3D 时,我已从控制面板将其切换到调试模式并定义了D3D_DEBUG_INFO
宏。
然后,我马上就GetDecoderDeviceGuids
失败了,返回码为 0x80004005。
当我取消定义D3D_DEBUG_INFO
时,GetDecoderDeviceGuids()
成功。
我使用带有最新驱动程序的 windows 7 32bit、Direct3D 9、ATI Radeon HD 4550。
是否可以以某种方式覆盖此错误并使用增强的 Direct3D 调试?
更新:忘了提一下,我的播放器既不使用 DirectShow,也不使用 Media Foundation。它使用 FFmpeg 库来解码视频,代码是从 VLC 复制的。