问题标签 [rendertarget]
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.
c# - 在紫色屏幕中更改 RenderTarget 结果?
我试图在运行时更改 RenderTargets,所以我可以在运行时绘制一些元素,操纵它们,然后最终将纹理绘制到屏幕上。问题是,如果我在运行时更改 RenderTarget,屏幕会变成紫色。这是我在 Draw 中得到的代码:
我如何创建 RenderTarget 似乎并不重要,如果我在运行时执行它(并且我确实需要在运行时创建内存中的纹理并使用 SpriteBatch 在它们上绘制),它会导致一个完全紫色的屏幕。我能做些什么来解决这个问题?
directx - Direct3D:从 IDirect3DSurface9(默认池)获取系统内存位图的有效方法?
我有 IDirect3DSurface9,默认池,YUV 格式。如何有效地从中获取位图位?目前我:
- 创建渲染目标:
device->CreateRenderTarget(surf_desc.Width, surf_desc.Height, D3DFMT_A8R8G8B8, D3DMULTISAMPLE_NONE, 0, TRUE, &render_target, NULL)
- 将 YUV 转换为 RGB32:(
device->StretchRect(videomem_surf, NULL, render_target_, NULL, D3DTEXF_NONE)
完整的矩形,无拉伸)
- 在系统内存中创建普通的屏幕外表面
device->CreateOffscreenPlainSurface(surf_desc.Width, surf_desc.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &sysmem_offscreen_surf, NULL)
- 将数据从视频内存复制到系统内存:
device->GetRenderTargetData(render_target, sysmem_offscreen_surface)
- GetDC 从屏幕外表面,创建兼容 DC 和兼容位图,BitBlt 从屏幕外表面 DC 到兼容 DC,并通过 GetDIBits() 将位图位复制到我的缓冲区
这看起来有点开销,因为有很多复制:从原始表面到渲染目标,然后到屏幕外表面,然后到兼容位图,最后到我的缓冲区。如何改进?
谢谢
list - 如何创建随机数量的 D2D 形状(矩形和椭圆)并在绘图时将它们称为数组?
让我详细说明。我像这样定义一个 D2D 矩形:
和一个椭圆:
为了绘制这些形状,我首先转换它们并将它们传递给渲染目标:
我想要一种方法来创建随机数量的矩形和椭圆,并将它们存储在一个数组中,然后也可以绘制它们。我有一个函数可以返回一个从零到五的随机数。我希望能够使用该数字创建一个指向这些形状的数组,并遍历它们以将它们绘制到屏幕上。关于如何解决这个问题的任何想法?
transparency - GDI 渲染到 direct2D ID2D1BitmapRenderTarget 始终是透明的
我想将我的电影渲染软件从 DirectDraw 移植到 Direct2D。由于兼容性问题,需要在图像之上进行 GDI 渲染。为了优化性能,我想实现某种后缓冲机制,但是 alpha 通道信息似乎有问题,所有 GDI 绘图都显得有些透明。
我为我的窗口句柄创建了一个ID2D1HwndRenderTarget和一个用于将图像复制到的ID2D1Bitmap。位图的像素格式为DXGI_FORMAT_B8G8R8A8_UNORM,alpha 模式为D2D1_ALPHA_MODE_IGNORE。HwdRenderTarget 与 GDI 兼容,所以我的渲染函数看起来像这样:
这个版本工作得很好:GDI 对象用纯色绘制,DrawTextEx-Text 有透明背景。
为了优化性能,我想在“backbuffer”中进行 GDI 绘图,因此只需要在发生变化时进行。否则我只能渲染缓存的位图。位图是空的和透明的,所以只有绘制的对象应该是可见的。
所以我创建了一个 CompatibleRenderTarget ID2D1BitmapRenderTarget,alpha模式是D2D1_ALPHA_MODE_PREMULTIPLIED:
现在我在 CompatibleRenderTarget 中进行 GDI 渲染:
我的渲染函数现在看起来像这样:
现在的问题是,所有 GDI 绘图都是透明的,透明程度取决于底层图像像素的值。深色文本在深色图像背景上显示为深色,但在白色背景上变为白色。但是 GDI 中没有使用 alpha 通道,myBitmap 也没有 alpha 信息。
那么alpha信息是从哪里来的呢?有人有想法吗?提前致谢!
顺便说一句,在 CompatibleRenderTarget 上使用 Direct2D 绘图也可以正常工作。
xna - 指向多个渲染目标
使用多个渲染目标有什么意义吗?在清除目标并再次使用它之前,不能只绘制一个渲染目标并将其存储在纹理中吗?
xna - 如何在 XNA 中的每一帧之后不刷新渲染目标
举个例子,我在 (10,10) 画了一个圆圈,然后在下一帧 (20,20) 画了另一个圆圈。(10,10) 处的圆圈不再可见。
我没有打电话给 graphicsdevice.clear。
有没有办法让之前绘制的图形不被清除?
我将这些绘制到辅助渲染目标中,以便可以将其用作背景。
有任何想法吗?
c# - 是否可以使 XNA RenderTarget2D 以 System.Drawing.Image 为目标?
基本上,我正在开发一个 C# WinForms 应用程序,并且我希望将 XNA 3.1 游戏绘制到图像上,无论是设备的主后备缓冲区还是我必须设置的渲染目标。这可能吗?
opengl - 在 OpenGL 2.1 中为浮点渲染目标使用深度缓冲区
我想使用深度缓冲区通过使用 OpenGL 2.1 / GLSL 1.2 将眼睛空间中粒子的深度值存储在 2D 纹理中。
到目前为止,我找到了一种使用颜色缓冲区的方法
但是,我不需要 BGA 组件。因此,我尝试使用深度缓冲区,但下面的代码将纹理中的每个值钳制为 0...1
我想知道如何使用深度缓冲区(可能是如何选择正确的内部格式/格式),以便不限制纹理值。
c# - C# XNA renderTarget2D .Clear(Color.Transparent) 不工作
我想要的只是清除我的 renderTarget2D 一次,以便它开始时完全透明,然后在帧之间保留它的内容。
我在绘制背景纹理之后绘制了 renderTarget 纹理,所以我不希望它被覆盖。但是 Clear(Color.Transparent) 它显示为不透明的紫色,据我所知,这是默认的透明颜色...
我究竟做错了什么?我尝试在构造函数中更改 SurfaceFormat 参数,但没有效果。我究竟做错了什么?
c# - C#/XNA - RenderTarget2D.GetData()、RenderTarget2D.SetData():每帧克隆纹理是否有效?
所以,从上一个问题开始,我发现我的解决方案是复制纹理以防止引用问题。但是,我在质疑:
一方面,每秒运行 60 次是否有效?尽管它设置了 1 个纹理,但我对性能很偏执,并且希望将性能保持在其体面或最佳状态。它会导致“主要显着的丢帧”之类的吗?
其次,它会提高性能,而不是创建一个新的颜色数组,我回收一个?