我想要做的是让Windows应用程序启动另一个Direct3D应用程序,并将Direct3D应用程序渲染到父进程提供的控件中.
这甚至可能吗?如果是的话,怎么办呢?
我是否需要为每个网格使用一个顶点缓冲区,还是可以在一个顶点缓冲区中存储多个网格?如果是的话,我应该这样做,我该怎么做?
有标准的着色器函数库,例如Cg.但是有没有资源可以告诉你每次采取多长时间......我的想法类似于你曾经如何查看每个ASM操作所需的周期数.
对于涉及3D打印机的我的业余爱好项目,我想从各种计算机游戏中捕获3D模型.游戏在Windows上运行,通常使用DirectX9,但也有一个可以配置为使用OpenGL.
是否有任何工具/软件允许我从正在运行的应用程序中获取整个场景并将其转储到可以转换为某种流行的3D格式(如OBJ)的文件中?
我需要的只是几何学; 点,边,多边形.我不需要纹理或着色器数据.这有可能吗?
我不知道你们中是否有很多人尝试使用Visual Studio 2012的新功能来调试基于Direct3D的应用程序.
我成功捕获了我的应用程序的框架,然后我想调试顶点着色器的执行:

我点击绿色三角形来调试给定的顶点,但是我找到了"No Symbol Found"消息,这使我无法调试它.
有人知道如何为Visual Studio找到符号吗?
谢谢.
情景:
我正在基于"Direct3D App"Visual Studio代码示例为Windows应用商店应用程序制作[edit:native WinRT] C++ Direct X DLL项目.
这必须是我的Windows Store App项目中的一个单独的DLL项目,因为我将在Windows 8 Metro应用程序和Windows Phone版本的应用程序中使用我的XAML UserControl和Direct X渲染器.
问题:
我无法在C#Windows Store应用程序项目中引用C++项目.Visual Studio拒绝使用以下单词:
A reference to <project-name> could not be added.
Run Code Online (Sandbox Code Playgroud)
我已经看到了使用/ clr标志编译C++项目的建议,但这与以下内容不兼容:
因此,在这种情况下,/ clr标志似乎不是一个选项.
问题:
如何引用C++项目以便在C#Windows Store App项目中使用我的XAML Direct X渲染器?还是有更好的选择吗?
提前致谢.
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) 我正在关注教程,并且我已经将通常的初始化转换为使用ComPtrs到此行:
ID3D11Device* g_pd3dDevice = nullptr;
ID3D11Device1* g_pd3dDevice1 = nullptr;
// Obtain the Direct3D 11.1 versions if available
hr = g_pd3dDevice->QueryInterface( __uuidof( ID3D11Device1 ), reinterpret_cast<void**>( &g_pd3dDevice1 ) );
Run Code Online (Sandbox Code Playgroud)
这就是我所期望的直接模拟:
Microsoft::WRL::ComPtr<ID3D11Device> device = nullptr;
Microsoft::WRL::ComPtr<ID3D11Device1> device1 = nullptr;
// Obtain the Direct3D 11.1 versions if available
hr = device->QueryInterface(__uuidof(ID3D11Device1), reinterpret_cast<ID3D11Device1**>(&device1));
Run Code Online (Sandbox Code Playgroud)
有很多编译器和智能感知警告(对我来说真的很神秘).它不喜欢演员,它不喜欢我如何使用QueryInterface().
我该怎么办?
错误:
Error 1 error C2440: 'reinterpret_cast' : cannot convert from 'Microsoft::WRL::Details::ComPtrRef<Microsoft::WRL::ComPtr<ID3D11Device1>>' to 'ID3D11Device1 **'
Error 2 error C2660: 'Microsoft::WRL::Details::RemoveIUnknownBase<T>::QueryInterface' : function does not take 1 arguments
Run Code Online (Sandbox Code Playgroud)
智能感知警告(可能有帮助吗?):
18 IntelliSense: function …Run Code Online (Sandbox Code Playgroud) 在OpenGL和Direct3D渲染管道中,几何着色器在顶点着色器之后和片段/像素着色器之前处理.现在显然在片段/像素着色器没有意义之后处理几何着色器,但我想知道为什么不把它放在顶点着色器之前?
从软件/高级角度来看,至少,它似乎更有意义:首先运行几何着色器以创建所需的所有顶点(并转储仅与几何着色器相关的任何数据),然后运行这样创建的所有顶点上的顶点着色器.有一个明显的缺点,现在必须在每个新创建的顶点上运行顶点着色器,但是在当前管道中需要为几何着色器中的每个顶点运行需要完成的任何逻辑. ,据推测; 所以那里没有太大的表现.
我假设,因为几何着色器在两个管道中处于这个位置,所以存在硬件原因,或者说它更有意义的非显而易见的管道原因.
(我知道在运行几何着色器之前需要进行多边形链接(如果它需要单点作为输入,可能不会这样做)但是我也知道它需要在几何着色器之后运行,所以它仍然不会在这些阶段之间运行顶点着色器的感觉?)
对于D3D编程的新手,在潜入D3D12之前,应该直接学习D3D12还是需要D3D11?
假设从头开始和C++的正确知识,我应该走哪条路?