在一个充满D3DX Sprite对象的Direct3D应用程序中,我希望能够全局调整亮度和对比度.如果可能的话,对比很重要.
我在这里看到了关于OpenGL的这个问题:在OpenGL中 调整整个场景的亮度/伽玛
但这并没有给我在DirectX环境中需要的东西.我知道这也是我可能用像素着色器做的事情,但这似乎就像用火箭筒射击飞行而我担心向后兼容旧版GPU,这些GPU必须在软件中进行任何着色.看起来这应该是可能的,我记得甚至很多老游戏,比如原版的半条命,在着色器的日子之前就有这样的设置.
编辑:此外,请注意,这不是一个全屏应用程序,所以这将需要是一个只会影响一个Direct3D设备,而不是整个监视器的全局设置.
我正在试图弄清楚如何在DirectX中调试像素和顶点着色器,我尝试使用Pix for Windows但发现它非常错误并且实际上不可操作.有没有替代方案可以让我在自己的应用程序中调试这些着色器?
无法创建我的交换链.我收到以下错误.
DX3dApp.obj : error LNK2019: unresolved external symbol _D3D10CreateDeviceAndSwapChain@32 referenced in function "public: bool __thiscall DX3dApp::InitDirect3D(void)" (?InitDirect3D@DX3dApp@@QAE_NXZ)
以下是我到目前为止所做的代码.
#include "DX3dApp.h"
bool DX3dApp::Init(HINSTANCE hInstance, int width, int height)
{
    mhInst = hInstance;
    mWidth = width;
    mHeight = height;
    if(!WindowsInit())
    {
        return false;
    }
    if(!InitDirect3D())
    {
        return false;
    }
}
int DX3dApp::Run()
{
     MSG msg = {0};
     while (WM_QUIT != msg.message)
    {
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) == TRUE)
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        Render();
    }
    return (int) msg.wParam;
}
bool DX3dApp::WindowsInit() …我已经将一个完美的MDX代码片段带到了Windows 2008R2(安装了所有DX驱动程序),并且得到了以下相当奇怪的错误.知道这可能是什么意思吗?
System.BadImageFormatException: Could not load file or assembly 'Microsoft.DirectX.Direct3D.dll' or one of its dependencies.  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
File name: 'Microsoft.DirectX.Direct3D.dll'
   at Nesteruk.MdxConsole.Console..ctor(Boolean fullScreen, Int32 charWidth, Int32 charHeight, Int32 windowWidth, Int32 windowHeight)
   at Nesteruk.MdxConsole.Console..ctor(Viewport viewport) in c:\Users\Dmitri.EUPHORIA\Projects\Open-Source\MdxConsole\MdxConsole\Console.cs:line 67
   at Nesteruk.MdxConsole.Console.NewConsole(Int32 width, Int32 height) in c:\Users\Dmitri.EUPHORIA\Projects\Open-Source\MdxConsole\MdxConsole\Console.cs:line 471
   at MdxConsoleDemo.Program.Everything() in c:\Users\Dmitri.EUPHORIA\Projects\Open-Source\MdxConsole\MdxConsoleDemo\Program.cs:line 51
   at MdxConsoleDemo.Program.Main() in c:\Users\Dmitri.EUPHORIA\Projects\Open-Source\MdxConsole\MdxConsoleDemo\Program.cs:line 30
我FW1FontWrapper在我的DirectX 11 C++应用程序中使用库来包装字体.
我想在渲染的文本中更改行间距(两行文本之间的距离)FW1FontWrapper.
我知道在DirectX中我可以使用它IDWriteTextFormat::SetLineSpacing(DWRITE_LINE_SPACING_METHOD_UNIFORM, 30.0f, 20.0f).
不幸的是,我不知道如何访问正确的IDWriteTextFormat结构.
我试过:
HRESULT hResult = FW1CreateFactory(FW1_VERSION, &FW1Factory);
hResult = FW1Factory->CreateFontWrapper(device, L"Arial", &fontWrapper);
//my attemp - first get the IDWriteFactory
IDWriteFactory *pDWriteFactory;
hResult = fontWrapper->GetDWriteFactory(&pDWriteFactory);
//and now the IDWriteTextFormat 
IDWriteTextFormat *pTextFormat;
hResult = pDWriteFactory->CreateTextFormat(L"Arial", NULL, 
    DWRITE_FONT_WEIGHT_NORMAL, DWRITE_FONT_STYLE_NORMAL, 
    DWRITE_FONT_STRETCH_NORMAL, 10.0f, L"", &pTextFormat);
pTextFormat->SetLineSpacing(DWRITE_LINE_SPACING_METHOD_UNIFORM, 100.f, 20.0f);
我想它不起作用,因为这样我创建和修改新的 IDWriteTextFormat,而不是通过以下方式影响渲染:
fontWrapper->DrawString(
   context,
   s2ws(content).c_str(),// String
   fontSize,// Font size
   startTextPosition.getX(),// X position
   startTextPosition.getY(),// Y position
   color,// Text color, 0xAaBbGgRr
   FW1_RESTORESTATE// …所以我回到图形编程,我正在使用的书(Frank Luna的3D游戏编程与DirectX 11),使用不再支持的xnamath.h.我已将其更改为使用DirectXMath.h,看似没有任何问题.但是,当我重载ostream <<运算符以使用XMVECTOR时,似乎存在问题.当我尝试使用cout打印XMVECTOR对象时,我收到此错误:
Error   1   error C2280: 'std::basic_ostream<char,std::char_traits<char>>::basic_ostream(const std::basic_ostream<char,std::char_traits<char>> &)' : attempting to reference a deleted function
此程序中只有一个文件(main.cpp):
#include <Windows.h>
#include <DirectXMath.h>
#include <iostream>
using namespace DirectX;
using namespace std;
// Overload the "<<" operators so that we can use cout to output XMVECTOR objects
ostream& operator<<(ostream os, FXMVECTOR v); 
int main() {
    cout.setf(ios_base::boolalpha);
        // Check support for SSE2 (Pentium4, AMD K8, and above
        if (!XMVerifyCPUSupport()) {
        cout << "DirectX Math not supported" << endl;
        return 0;
    }
    XMVECTOR …在D3D12中,我怎样画方形?以下代码只能绘制第一个三角形.
为什么D3D12中没有D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLELIST?TRIANGLELIST有什么选择吗?或者有没有办法直接画广场?
// Describe and create the graphics pipeline state object (PSO).
            D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc = {};
            psoDesc.InputLayout = { inputElementDescs, _countof(inputElementDescs) };
            psoDesc.pRootSignature = g_rootSignature.Get();
            psoDesc.VS = CD3DX12_SHADER_BYTECODE(vertexShader.Get());
            psoDesc.PS = CD3DX12_SHADER_BYTECODE(pixelShader.Get());
            psoDesc.RasterizerState = CD3DX12_RASTERIZER_DESC(D3D12_DEFAULT);
            psoDesc.BlendState = CD3DX12_BLEND_DESC(D3D12_DEFAULT);
            psoDesc.DepthStencilState.DepthEnable = FALSE;
            psoDesc.DepthStencilState.StencilEnable = FALSE;
            psoDesc.SampleMask = UINT_MAX;
            psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
            psoDesc.NumRenderTargets = 1;
            psoDesc.RTVFormats[0] = DXGI_FORMAT_R8G8B8A8_UNORM;
            psoDesc.SampleDesc.Count = 1;
            if (SUCCEEDED(g_pd3dDevice->CreateGraphicsPipelineState(&psoDesc, IID_PPV_ARGS(&g_pipelineState))))
            {
                cout << "CreateGraphicsPipelineState passed";
            }
            else
            {
                cout << "CreateGraphicsPipelineState failed";
                return E_FAIL;
            }
        }
        // Create the …我正在接收多个x264 RTSP流,我正在使用libVLC解码它们,我想使用硬件加速来完成任务.
如果我在Windows上使用VLC播放器本身,我可以在简单首选项 - >输入/编解码器 - >硬件加速解码中选择"DirectX视频加速(DXVA)2.0",与禁用相比,我可以看到CPU利用率显着下降那个选择.
在C++代码中,我尝试将选项"--avcodec-hw = dxva2"添加到libvlc_new()的参数中,但没有运气,硬件加速似乎没有被使用(我想说解码比50%慢)在dxva2上的播放器上)
为什么裁剪应该在CCS中完成,而不是在NDCS中完成.我认为在NDCS中剪辑更容易,但很多书都说剪辑应该在CCS中完成.他们给出了一个例子,从后面和前面将一条线放在眼睛上.
我无法理解为什么它会成为一个问题.
我阅读了D3D11用法页面并来自CUDA背景我想知道标记为D3D11_USAGE_STAGING存储的纹理会是什么样的内存.
我想在CUDA中它会固定页面锁定的零拷贝内存.我测量了从ID3D11Texture2Dwith D3D11_USAGE_STAGING到分配的主机缓冲区的传输时间,malloc花了将近7毫秒(在流媒体/游戏中相当多),我认为这将是从GPU全局内存到内存区域所需的时间.
我的任何假设都是正确的吗?什么D3D11_USAGE_STAGING用作GPU内存?