我没有找到绘图表面概念的良好定义.表面有哪些属性?在纯OpenGL的上下文中没有表面,因为OpenGL没有窗口系统特定事物的概念.在OpenGL ES中,虽然您有EGL API,它引入了绘图表面的概念,但没有正确定义它.你对绘图表面的简洁定义是什么?
我受到了C++ 3D应用程序项目的挑战,该项目将使用3个显示器,每个显示器使用不同的相机进行渲染.
最近我了解了Ogre3D,但目前尚不清楚它是否支持将不同摄像头输出到不同的显示器/ GPU.
有没有人有类似安装程序和食人魔或其他引擎的经验?
我正在阅读使用DirectX 10的3D游戏编程简介来学习一些DirectX,我正在尝试进行拟议的练习(第4章为拥有该书的人).
一个练习要求使用禁用Alt + Enter功能(切换全屏模式)IDXGIFactory::MakeWindowAssociation.
然而,无论如何它都会切换全屏模式,我无法理解为什么.这是我的代码:
HR(D3D10CreateDevice(
0, //default adapter
md3dDriverType,
0, // no software device
createDeviceFlags,
D3D10_SDK_VERSION,
&md3dDevice) );
IDXGIFactory *factory;
HR(CreateDXGIFactory(__uuidof(IDXGIFactory), (void **)&factory));
HR(factory->CreateSwapChain(md3dDevice, &sd, &mSwapChain));
factory->MakeWindowAssociation(mhMainWnd, DXGI_MWA_NO_ALT_ENTER);
ReleaseCOM(factory);
Run Code Online (Sandbox Code Playgroud) 我一直在屏幕截图上鬼混了一段时间,我设法捕获整个屏幕,屏幕上的某些区域等...
但是当我进入游戏并尝试捕捉屏幕时,它完全忽略了游戏,而是捕获桌面(或游戏窗口后面的任何内容).另一个有趣的事实是,PrtScn按钮也会发生同样的事情.
关于如何捕捉游戏画面的任何想法?
我想更好地理解GPU是如何工作的,我对他们如何处理Direct3D或OpenGL等高级API感到困惑.看到图形卡广告它们支持Direct3D和OpenGL硬件加速是很常见的.这是否意味着他们直接在硬件中处理Direct3D和OpenGL指令?我无法找到明确的证据,或者将它们编译成GPU可以处理的汇编表示.如果有这样的转换谁做到了?软件库(Direct3D/OpenGL),驱动程序还是GPU本身?在同一行,图形管道定义在哪里?在GPU硬件,驱动程序或软件库中?这让我特别困惑于可编程管道的概念.
有没有一个很好的资源,我可以找到有关这些细节的信息?
当在c中使用的Direct3D ++我可以写例如"立方"类,即包含"ID3D11Buffer*vertexBuffer_",并确保该立方体对象的析构调用vertexBuffer _->推出().
我可以有一个包含"unique_ptr cube_"对象的"Scene"类.所以我知道当我删除我的场景时,立方体将被删除,因此将调用它正在使用的D3D资源上的释放.
在DI中无法做到这一点.我可以编写析构函数,但我不知道它们什么时候会被调用.如果GC不需要内存,则可能永远不会被调用...
那么在D中处理这类事情的最佳方法是什么?我可以添加一个"免费"的成员函数,每一个释放所有的它自己的资源,并呼吁它拥有的任何对象的"自由"的对象,但是这似乎是一个容易出错的手动操作,并从C++是一种倒退.
在D中有没有更好的方法来处理这类事情?
我正在使用Windows 8/Visual Studio 2012,C++ 11和Direct3D 11进行开发.
我包括像这样的Direct3D库
#pragma comment(lib, "dxgi.lib")
#pragma comment(lib, "d3d11.lib")
#pragma comment(lib, "d3dx11.lib") // <-- error LNK1104: cannot open file 'd3dx11.lib'
#pragma comment(lib, "d3dx10.lib")
Run Code Online (Sandbox Code Playgroud)
但是,链接器似乎找不到d3dx11.lib.将库所在的路径添加到项目的"库目录"后,链接器仍无法找到这些文件.即使我将lib文件复制到项目目录本身后,它也无法正常工作.
我从2010年6月起安装了Windows 8 SDK和DirectX SDK.我错过了什么吗?
我遇到的原始问题是,我无法让我的游戏在我的第二台显示器上全屏运行.要显示设置并将主显示从第二个交换到第一个,让我的游戏全屏运行,没有任何问题.我的两台显示器的分辨率是相同的,因此问题必须在其他地方.

负责全屏交换的代码如下所示:
// create device and front/back buffers
if( FAILED( hr = D3D11CreateDeviceAndSwapChain(
nullptr,
D3D_DRIVER_TYPE_HARDWARE,
nullptr,
createFlags,
nullptr,
0,
D3D11_SDK_VERSION,
&sd,
&pSwapChain,
&pDevice,
nullptr,
&pImmediateContext ) ) )
{
throw CHILI_GFX_EXCEPTION( hr,L"Creating device and swap chain" );
}
Run Code Online (Sandbox Code Playgroud)
而交换链描述sd以前是这样创建的:
// create device and swap chain/get render target view
DXGI_SWAP_CHAIN_DESC sd = {};
sd.BufferCount = 1;
sd.BufferDesc.Width = Graphics::ScreenWidth;
sd.BufferDesc.Height = Graphics::ScreenHeight;
sd.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
sd.BufferDesc.RefreshRate.Numerator = 1;
sd.BufferDesc.RefreshRate.Denominator = 60;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.OutputWindow = key.hWnd;
sd.SampleDesc.Count = …Run Code Online (Sandbox Code Playgroud) 当Visual Studio 11宣布"图形调试器"功能时,我感到非常高兴,我立即尝试让它在我所拥有的各种项目上工作,不幸的是我只是设法让它适用于Windows 8 Metro应用程序!具体而言,C++ Metro项目模板可以正确运行并捕获所有预期信息.
使用Visual Studio的Developer Preview版本,在Windows 7上,任何在图形调试器(Alt-F5)下启动应用程序的尝试都会在D3D11CreateDeviceAndSwapChain()上崩溃,即使它们正常工作.在我工作的Windows 8 Consumer Preview机器上的Visual Studio 11 Beta上,我得到了更多,图形调试器HUD正确显示,但任何获取捕获的尝试(应用程序中的打印屏幕或工具栏按钮)只会导致一条消息(在输出日志和打开的.vsglog顶部的黄色栏中):
图形诊断引擎无法提供结果,很可能是因为vsglog使得此计算机上不支持DirectX调用.
直接从Metro模板应用程序移植Direct3D调用就是这种情况!我没有看到来自MSDN文档的任何消息,该功能仅用于Metro,所以我希望我只是做一些愚蠢的事情,但是当不在图形调试器下时应用程序正常工作.
其他信息:D3D11_CREATE_DEVICE_DEBUG设置,DirectX控制面板启用Direct3D调试,我得到预期的创建/销毁信息消息,而输出中没有其他消息.
IDXGISurface1 GetDC/ReleaseDC用于创建纹理的线程安全规则是D3D11_RESOURCE_MISC_GDI_COMPATIBLE什么?
我可以交互ID3D11Device和ID3D11DeviceContext之间GetDC,并ReleaseDC在另一个线程,没有数据争或因阻止隐式同步?或者我是为了避免GPU空转被迫为D3D11Device执行GDI渲染的线程创建一个单独的,然后D3D11Device通过复制到"主"将其传回D3D11_RESOURCE_MISC_SHARED_KEYED_MUTEX?
即以下是否有效?
thread 1:
D3D11Device::CreateTexture2D // Create texture 1
IDXGISurface1::GetDC // Get DC for texture 1
... // Draw to texture1 using GDI
IDXGISurtface1::ReleaseDC // Release DC for texture1
thread 2:
// Is this valid if thread 1 is drawing using GDI?
D3D11DeviceContext::OMSetRenderTargets
D3D11DeviceContext::Draw // Draw texture2.
Run Code Online (Sandbox Code Playgroud) direct3d ×10
c++ ×6
directx ×3
direct3d11 ×2
dxgi ×2
graphics ×2
opengl ×2
3d ×1
c# ×1
d ×1
directx-10 ×1
directx-11 ×1
gif ×1
ogre3d ×1
opengl-es ×1