小编lun*_*tix的帖子

适用于Windows 8的图形框架?MonoGame?OpenGL和Xaml/DirectX混合?

我想为Windows 8开发一款游戏,但由于不支持Xna,我真的不知道,如果使用像MonoGame这样的东西是好的 - 因为我觉得使用MonoDevelop没有任何意义使用OpenGL,而UI前端与DirectX一起运行.但是我的搜索和"apptivate.ms",他们仍然迫使开发人员使用MonoDevelop - 但为什么像微软这样的公司会这样做呢?

而且我不喜欢使用DirectX在C++中构建我的游戏,因为在我的情况下,它不是一个大游戏,而我最喜欢的语言(也就是我工作的语言)是C#..

顺便说一下,用OpenGL或C++编写这个游戏对我来说并不是什么大不了的事,因为我在过去的四年中有很多这方面的经验,但在这种情况下,我想要一个"快速"和"保存"像C#和图形框架的解决方案.

所以...也许某人有这些问题的答案:

  • 我应该将MonoGame与Xaml/C#一起使用,而不用担心DirectX和OpenGL的混合?
  • 或者是否还有其他可以使用的DirectX/Game Framework?
  • 或许,我完全错了,Xaml不需要DirectX?或者我可以强迫MonoGame使用DirectX?
  • 或者,另一点 - 对于具有一些漂亮着色效果的太空射击者而言,像"System.Drawing"这样的东西足够快(我认为,对于我的情况,我需要着色和像绽放,模糊等等)?也许,微软增加了一个新的2D绘图库?(但我认为它仍然是gdi +)

c# xaml microsoft-metro windows-8 winrt-xaml

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

像DirectX/SharpDX中的"glReadPixels"这样的函数

我正在寻找一种在鼠标点读取像素颜色的方法.在OpenGL中,它是在绘制场景(或部分场景)后调用函数"glReadPixels"完成的.我想在后台制作一个简单的颜色拾取程序,用于识别3D空间中的形状/线条.

那么,在SharpDX(DirectX10/DirectX11)中是否有相同的方法/功能/建议?

c# opengl directx sharpdx

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

SharpDX:启用BlendState

我正试图让"SharpDX.Direct3D11.DeviceContext.OutputMerger.Blendstate"工作.没有这个,我有一个很好的场景(Polygones上有纹理,对于Spaceshooter).我在过去的三年里完成了OpenGL Graphics,所以我认为它可能就像在OpenGL中一样简单 - 只需启用Blending并设置正确的Dst/Src模式.但是如果我设置一个新的BlendStateDescription,所有输出都是黑色,即使"RenderTarget [x] .IsBlendEnabled"设置为"false".我搜索了一个教程或其他东西,并找到一个 - 但它使用效果.所以我的问题很简单 - 我是否必须在SharpDX中使用技术和效果?没有其他方法可以简单混合?

这就是我所做的:

mBackBuffer = Texture2D.FromSwapChain<Texture2D>(mSwapChain, 0);
mRenderView = new RenderTargetView(mDevice, mBackBuffer);
mContext.OutputMerger.SetTargets(mDepthStencilView, mRenderView);
mContext.OutputMerger.SetBlendState(new BlendState(mDevice, new BlendStateDescription()), new SharpDX.Color4(1.0f), -1);

mContext.OutputMerger.BlendState.Description.RenderTarget[0].IsBlendEnabled = true;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha;
mContext.OutputMerger.BlendState.Description.RenderTarget[0].BlendOperation = BlendOperation.Add;           
mContext.OutputMerger.BlendState.Description.RenderTarget[0].SourceAlphaBlend = BlendOption.One;            
mContext.OutputMerger.BlendState.Description.RenderTarget[0].DestinationAlphaBlend = BlendOption.Zero;          
mContext.OutputMerger.BlendState.Description.RenderTarget[0].AlphaBlendOperation = BlendOperation.Add;          
mContext.OutputMerger.BlendState.Description.RenderTarget[0].RenderTargetWriteMask = ColorWriteMaskFlags.All;           
Run Code Online (Sandbox Code Playgroud)

并且,即使只是简单地做:

mContext.OutputMerger.SetBlendState(new BlendState(mDevice, new BlendStateDescription()), new SharpDX.Color4(1.0f), -1);
mContext.OutputMerger.BlendState.Description.RenderTarget[0].IsBlendEnabled = false;
Run Code Online (Sandbox Code Playgroud)

输出全是黑色..也许我只需更改像素着色器中的某些内容?

directx windows-8 sharpdx

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

低级鼠标钩 - 断点上的鼠标冻结

我想自己绘制和移动窗户(使用铬嵌入式框架).要做到这一点,我需要一个全局回调鼠标移动,在我的窗口外 - 所以我安装了一个低级鼠标钩:

hMouseLLHook = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)mouseHookProc, hInstance, NULL);
Run Code Online (Sandbox Code Playgroud)

钩子简单地抓取鼠标事件并调用"CallNextHookEx".这里没有问题,一切都按照要求行事.我现在的问题是:如果调试器中断或抛出异常,我就不能再移动鼠标..

我尝试在另一个线程中处理钩子,如下所示:

HANDLE mouseProcHandle = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)mouseProcessor, NULL, NULL, &dwMouseProcThread);

DWORD WINAPI Win32Application::mouseProcessor(LPVOID lpParm) {
    hMouseLLHook = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)mouseHookProc, ((Win32Application*)Application::getInstance())->hInstance, NULL);

    MSG message;
    while (GetMessage(&message, NULL, 0, 0)) {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }

    UnhookWindowsHookEx(hMouseLLHook);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这也无法解决问题.是否有解决方法,解决方案或其他方法来执行此操作?另外,我认为可能没有必要使用低级别的钩子,因为我只需要了解它的运行情况,如果我是最后一个,那就不会有问题,所以系统/其他进程可以处理首先是鼠标回调.

c++ windows visual-studio visual-c++ chromium-embedded

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