问题标签 [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.

0 投票
3 回答
2681 浏览

c# - 在紫色屏幕中更改 RenderTarget 结果?

我试图在运行时更改 RenderTargets,所以我可以在运行时绘制一些元素,操纵它们,然后最终将纹理绘制到屏幕上。问题是,如果我在运行时更改 RenderTarget,屏幕会变成紫色。这是我在 Draw 中得到的代码:

我如何创建 RenderTarget 似乎并不重要,如果我在运行时执行它(并且我确实需要在运行时创建内存中的纹理并使用 SpriteBatch 在它们上绘制),它会导致一个完全紫色的屏幕。我能做些什么来解决这个问题?

0 投票
2 回答
5723 浏览

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() 将位图位复制到我的缓冲区

这看起来有点开销,因为有很多复制:从原始表面到渲染目标,然后到屏幕外表面,然后到兼容位图,最后到我的缓冲区。如何改进?

谢谢

0 投票
1 回答
387 浏览

list - 如何创建随机数量的 D2D 形状(矩形和椭圆)并在绘图时将它们称为数组?

让我详细说明。我像这样定义一个 D2D 矩形:

和一个椭圆:

为了绘制这些形状,我首先转换它们并将它们传递给渲染目标:

我想要一种方法来创建随机数量的矩形和椭圆,并将它们存储在一个数组中,然后也可以绘制它们。我有一个函数可以返回一个从零到五的随机数。我希望能够使用该数字创建一个指向这些形状的数组,并遍历它们以将它们绘制到屏幕上。关于如何解决这个问题的任何想法?

0 投票
2 回答
3071 浏览

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 绘图也可以正常工作。

0 投票
2 回答
1625 浏览

xna - 指向多个渲染目标

使用多个渲染目标有什么意义吗?在清除目标并再次使用它之前,不能只绘制一个渲染目标并将其存储在纹理中吗?

0 投票
1 回答
625 浏览

xna - 如何在 XNA 中的每一帧之后不刷新渲染目标

举个例子,我在 (10,10) 画了一个圆圈,然后在下一帧 (20,20) 画了另一个圆圈。(10,10) 处的圆圈不再可见。

我没有打电话给 graphicsdevice.clear。

有没有办法让之前绘制的图形不被清除?

我将这些绘制到辅助渲染目标中,以便可以将其用作背景。

有任何想法吗?

0 投票
1 回答
439 浏览

c# - 是否可以使 XNA RenderTarget2D 以 System.Drawing.Image 为目标?

基本上,我正在开发一个 C# WinForms 应用程序,并且我希望将 XNA 3.1 游戏绘制到图像上,无论是设备的主后备缓冲区还是我必须设置的渲染目标。这可能吗?

0 投票
1 回答
983 浏览

opengl - 在 OpenGL 2.1 中为浮点渲染目标使用深度缓冲区

我想使用深度缓冲区通过使用 OpenGL 2.1 / GLSL 1.2 将眼睛空间中粒子的深度值存储在 2D 纹理中。

到目前为止,我找到了一种使用颜色缓冲区的方法

但是,我不需要 BGA 组件。因此,我尝试使用深度缓冲区,但下面的代码将纹理中的每个值钳制为 0...1

我想知道如何使用深度缓冲区(可能是如何选择正确的内部格式/格式),以便不限制纹理值。

0 投票
1 回答
6635 浏览

c# - C# XNA renderTarget2D .Clear(Color.Transparent) 不工作

我想要的只是清除我的 renderTarget2D 一次,以便它开始时完全透明,然后在帧之间保留它的内容。

我在绘制背景纹理之后绘制了 renderTarget 纹理,所以我不希望它被覆盖。但是 Clear(Color.Transparent) 它显示为不透明的紫色,据我所知,这是默认的透明颜色...

我究竟做错了什么?我尝试在构造函数中更改 SurfaceFormat 参数,但没有效果。我究竟做错了什么?

0 投票
1 回答
1440 浏览

c# - C#/XNA - RenderTarget2D.GetData()、RenderTarget2D.SetData():每帧克隆纹理是否有效?

所以,从上一个问题开始,我发现我的解决方案是复制纹理以防止引用问题。但是,我在质疑:

一方面,每秒运行 60 次是否有效?尽管它设置了 1 个纹理,但我对性能很偏执,并且希望将性能保持在其体面或最佳状态。它会导致“主要显着的丢帧”之类的吗?

其次,它会提高性能,而不是创建一个新的颜色数组,我回收一个?