其中哪一个提供了最佳的游戏开发API?哪个库更容易使用,速度更快,文档更多?
我正在尝试使用SharpDX 2.5将DirectX 11实现到WPF中.可悲的是http://directx4wpf.codeplex.com/和http://sharpdxwpf.codeplex.com/无法与SharpDX 2.5一起使用.我也无法将WPFHost DX10示例移植到DX11,并且此示例的完整代码包已关闭:http://www.indiedev.de/wiki/DirectX_in_WPF_integrieren
有人可以提出另一种实施方式吗?
我正试图在Sharpdx/DirectX应用程序中寻找可能的内存泄漏.
我从流程资源管理器中获取以下信息,我不知道如何解释.

Xna不受支持,不幸的是我最近开始游戏编程(约9个月).什么是更好的选择,DirectX或OpenGl.
现在,我不认为DirectX或OpenGl有C#的官方库,那么对于新手来说哪一个会更好?
我听说过像Mono,SharpDx和SlimDx这样的东西..但是DirectX相比OpenGl有什么优势,反之亦然.
另外,这些Mono,SharpDx和SlimDx被称为什么?他们有一定的名字吗?
(这个问题是基于进一步调查这个其他的问题,但不相同的问题,这是关于绘画的问题非常具体的问题.)
我正在尝试在目标窗口上绘制一个重叠的透明表面,问题是我不知道如何将其涂成透明的,所以到目前为止我的表面是黑色的,我看不清楚正确的方法来清除黑色下面代码中该表面的颜色.
我读过有关pixelformats和alphamodes的内容,但是,似乎我不能使用AlphaMode.Straight所谓的允许透明度.
我知道一个可以做到这一点的免费软件应用程序,它的名字是TurboHUD(一个在游戏客户端的窗口上绘制透明表面以绘制对象的应用程序,即HUD).说实话,也许是荒谬的:我试图从两年多前开始做到这一点,我仍然不知道如何通过做透明度来开始这样做,我需要开始在透明表面上绘制物体.
我做错了什么?这个示例代码是用VB.NET编写的,但我在C#中也接受了一个解决方案.
Imports SharpDX
Imports SharpDX.Direct2D1
Imports SharpDX.Direct3D
Imports SharpDX.DXGI
Imports SharpDX.Mathematics.Interop
Imports SharpDX.Windows
Public NotInheritable Class Form1 : Inherits Form
Private factory As New Direct2D1.Factory(Direct2D1.FactoryType.SingleThreaded)
Private render As WindowRenderTarget
Private renderProps As HwndRenderTargetProperties
Private renderThread As Thread = Nothing
Private Sub Form1_Load() Handles MyBase.Shown
Dim hwnd As IntPtr = Process.GetProcessesByName("notepad").Single().MainWindowHandle
Me.renderProps = New HwndRenderTargetProperties()
Me.renderProps.Hwnd = hwnd
Me.renderProps.PixelSize = New Size2(1920, 1080)
Me.renderProps.PresentOptions = PresentOptions.None
Me.render = New WindowRenderTarget(Me.factory, New …Run Code Online (Sandbox Code Playgroud) 在任何人提到它之前,我参考了这个链接,找出我需要将后备缓冲区复制到位图.
现在的情况
期望的情况
正确制作屏幕截图,让目标进程继续正常执行.
码
注意Hook类与链接中的相同.我只添加了一个UnmodifiableHook版本,它的名字就是这么说的.我遗漏了所有不重要的位.
TestSwapChainHook.cs
using System;
using System.Runtime.InteropServices;
namespace Test
{
public sealed class TestSwapChainHook : IDisposable
{
private enum IDXGISwapChainVirtualTable
{
QueryInterface = 0,
AddRef = 1,
Release = 2,
SetPrivateData = 3,
SetPrivateDataInterface = 4,
GetPrivateData = 5,
GetParent = 6,
GetDevice = 7,
Present = 8,
GetBuffer = 9,
SetFullscreenState = 10,
GetFullscreenState = 11,
GetDesc = 12,
ResizeBuffers = 13,
ResizeTarget = …Run Code Online (Sandbox Code Playgroud) 我想尽快画出线条.出于这个原因,我使用InteropBitmap实现了一个方法.这非常有效.下一步是与ShardDX进行比较.基本上我想要做的是:在BackgroundWorker中运行以下代码.这确实告知WPF有关WIC的更新.我发现这个代码(创建ShapeDX和绘制线所需的所有代码)比使用InteropBitmap做同样的代码要花费大约10ms.
我现在的问题很简单,如何加快速度?我可以以某种方式更改代码,我只需要调用BeginDraw,创建行和EndDraw,而不是总是执行所有这些图像编码/解码的东西吗?还是有更好的方法?
var wicFactory = new ImagingFactory();
var d2dFactory = new SharpDX.Direct2D1.Factory();
const int width = 800;
const int height = 200;
var wicBitmap = new Bitmap(wicFactory, width, height, SharpDX.WIC.PixelFormat.Format32bppBGR, BitmapCreateCacheOption.CacheOnLoad);
var renderTargetProperties = new RenderTargetProperties(RenderTargetType.Default, new PixelFormat(Format.Unknown, AlphaMode.Unknown), 0, 0, RenderTargetUsage.None, FeatureLevel.Level_DEFAULT);
var d2dRenderTarget = new WicRenderTarget(d2dFactory, wicBitmap, renderTargetProperties);
var solidColorBrush = new SharpDX.Direct2D1.SolidColorBrush(d2dRenderTarget, SharpDX.Color.White);
d2dRenderTarget.BeginDraw();
//draw whatever you want
d2dRenderTarget.EndDraw();
// Memorystream.
MemoryStream ms = new MemoryStream();
var stream = new WICStream(wicFactory, ms);
// JPEG encoder
var encoder …Run Code Online (Sandbox Code Playgroud) 是否可以使用C#编写Windows 8 RT和/或Windows 8 Phone游戏?
我想调整使用SharpDX中的桌面复制API捕获的屏幕.我正在使用SharpDX Samples存储库中的Screen Capture示例代码,相关部分如下:
SharpDX.DXGI.Resource screenResource;
OutputDuplicateFrameInformation duplicateFrameInformation;
// Try to get duplicated frame within given time
duplicatedOutput.AcquireNextFrame(10000, out duplicateFrameInformation, out screenResource);
if (i > 0)
{
// copy resource into memory that can be accessed by the CPU
using (var screenTexture2D = screenResource.QueryInterface<Texture2D>())
device.ImmediateContext.CopyResource(screenTexture2D, screenTexture);
// Get the desktop capture texture
var mapSource = device.ImmediateContext.MapSubresource(screenTexture, 0, MapMode.Read, MapFlags.None);
System.Diagnostics.Debug.WriteLine(watch.Elapsed);
// Create Drawing.Bitmap
var bitmap = new System.Drawing.Bitmap(width, height, PixelFormat.Format32bppArgb);
var boundsRect = new System.Drawing.Rectangle(0, 0, width, …Run Code Online (Sandbox Code Playgroud) 使用C#或VB.NET.我正在尝试使表单的背景透明; 这个表单将叠加到其他窗口,它将是最顶层的窗口,因此透明表单(及其控件)必须具有不能获得焦点的能力,并且必须可以单击它们,这意味着如果例如我在透明背景上执行左键单击,然后在该背景上的窗口(在Z顺序窗口中)是必须接收单击的窗口.
笔记:
为了避免焦点,我正在覆盖这里CreateParams所解释的财产.
为了使我的形式透明,我打电话的Win32 DwmExtendFrameIntoClientArea函数,并且还使用SharpDX库作为解释在这里.但我认为这与问题本身无关.
我将展示我使用图像的意思.下面是与文本编辑器程序窗口重叠的表单图像(没有透明度,只是为了简化理解); 请注意,我的表单没有获得焦点.好吧,问题是当我点击表单的背景(或其中一个控件)时,背景上的窗口(文本编辑器窗口)仍然具有焦点但它无法接收到点击.
这是上面相同的图像,但是透明的形式:
我不确定要调查什么,所以我试图通过覆盖透明窗体的Window过程(WndProc)来测试相关的窗口消息,例如WM_NCHITEST或者试图在试错阶段找到有用的东西.WM_MOUSEACTIVATE消息如下所述: