标签: direct3d

OpenGL ES或Direct3D中的表面究竟是什么?

我没有找到绘图表面概念的良好定义.表面有哪些属性?在纯OpenGL的上下文中没有表面,因为OpenGL没有窗口系统特定事物的概念.在OpenGL ES中,虽然您有EGL API,它引入了绘图表面的概念,但没有正确定义它.你对绘图表面的简洁定义是什么?

3d graphics direct3d opengl-es

9
推荐指数
1
解决办法
6172
查看次数

多显示器3D应用程序

我受到了C++ 3D应用程序项目的挑战,该项目将使用3个显示器,每个显示器使用不同的相机进行渲染.

最近我了解了Ogre3D,但目前尚不清楚它是否支持将不同摄像头输出到不同的显示器/ GPU.

有没有人有类似安装程序和食人魔或其他引擎的经验?

c++ opengl direct3d ogre3d

8
推荐指数
1
解决办法
2726
查看次数

在Direct3D(DirectX)应用程序中禁用alt-enter

我正在阅读使用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)

c++ directx direct3d directx-10

8
推荐指数
1
解决办法
5647
查看次数

C#捕获直接3D屏幕

我一直在屏幕截图上鬼混了一段时间,我设法捕获整个屏幕,屏幕上的某些区域等...

但是当我进入游戏并尝试捕捉屏幕时,它完全忽略了游戏,而是捕获桌面(或游戏窗口后面的任何内容).另一个有趣的事实是,PrtScn按钮也会发生同样的事情.

关于如何捕捉游戏画面的任何想法?

c# direct3d gif screen-capture

8
推荐指数
1
解决办法
7661
查看次数

如何在显卡中处理Direct3D和OpenGL指令?

我想更好地理解GPU是如何工作的,我对他们如何处理Direct3D或OpenGL等高级API感到困惑.看到图形卡广告它们支持Direct3D和OpenGL硬件加速是很常见的.这是否意味着他们直接在硬件中处理Direct3D和OpenGL指令?我无法找到明确的证据,或者将它们编译成GPU可以处理的汇编表示.如果有这样的转换谁做到了?软件库(Direct3D/OpenGL),驱动程序还是GPU本身?在同一行,图形管道定义在哪里?在GPU硬件,驱动程序或软件库中?这让我特别困惑于可编程管道的概念.

有没有一个很好的资源,我可以找到有关这些细节的信息?

opengl graphics direct3d gpu-programming

8
推荐指数
2
解决办法
3049
查看次数

用D语言释放资源

当在c中使用的Direct3D ++我可以写例如"立方"类,即包含"ID3D11Buffer*vertexBuffer_",并确保该立方体对象的析构调用vertexBuffer _->推出().

我可以有一个包含"unique_ptr cube_"对象的"Scene"类.所以我知道当我删除我的场景时,立方体将被删除,因此将调用它正在使用的D3D资源上的释放.

在DI中无法做到这一点.我可以编写析构函数,但我不知道它们什么时候会被调用.如果GC不需要内存,则可能永远不会被调用...

那么在D中处理这类事情的最佳方法是什么?我可以添加一个"免费"的成员函数,每一个释放所有的它自己的资源,并呼吁它拥有的任何对象的"自由"的对象,但是这似乎是一个容易出错的手动操作,并从C++是一种倒退.

在D中有没有更好的方法来处理这类事情?

direct3d d direct3d11

8
推荐指数
1
解决办法
596
查看次数

找不到d3dx11.lib?

我正在使用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.我错过了什么吗?

c++ directx direct3d directx-11 direct3d11

8
推荐指数
1
解决办法
1万
查看次数

D3D11CreateDeviceAndSwapChain不会在第二台显示器上切换到全屏

我遇到的原始问题是,我无法让我的游戏在我的第二台显示器上全屏运行.要显示设置并将主显示从第二个交换到第一个,让我的游戏全屏运行,没有任何问题.我的两台显示器的分辨率是相同的,因此问题必须在其他地方. 显示器

负责全屏交换的代码如下所示:

// 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)

c++ directx direct3d dxgi

8
推荐指数
0
解决办法
408
查看次数

Visual Studio 11的图形调试器的目标应用程序的要求

当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调试,我得到预期的创建/销毁信息消息,而输出中没有其他消息.

c++ direct3d visual-studio-2012

7
推荐指数
1
解决办法
3409
查看次数

GetXD/ReleaseDC的IDXGISurface1线程安全/同步规则?

IDXGISurface1 GetDC/ReleaseDC用于创建纹理的线程安全规则是D3D11_RESOURCE_MISC_GDI_COMPATIBLE什么?

我可以交互ID3D11DeviceID3D11DeviceContext之间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)

c++ direct3d thread-safety dxgi

7
推荐指数
1
解决办法
717
查看次数