小编san*_*icz的帖子

D3D11:如何将GDI文本绘制到GXDI曲面?(没有D2D)

我需要一些帮助,用GDI和D3D11为纹理绘制文本.我尝试使用D2D/DirectWrite,但它只支持D3D10而不支持D3D11.到目前为止,我尝试过的所有内容都失败了......现在我想使用GDI方法在纹理中写入.所以我用这个参数创建了一个纹理:

Usage = D3D11_USAGE_DEFAULT;
Format = DXGI_FORMAT_B8G8R8A8_UNORM;
BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
CPUAccessFlags = 0;
MiscFlags = D3D11_RESOURCE_MISC_GDI_COMPATIBLE
Run Code Online (Sandbox Code Playgroud)

然后我从这个纹理创建了一个普通的RenderTargetView,就像这里的Microsoft sais:http://msdn.microsoft.com/en-us/library/ff476203%28v=vs.85%29.aspx

下一步:获取DXGI接口:

m_pTexFSText->QueryInterface(__uuidof(IDXGISurface1), (void **)(&m_pDXGISurface));
Run Code Online (Sandbox Code Playgroud)

在Render函数上,我这样做:

m_pDeviceContext->OMSetRenderTargets(1,&m_pTextRenderTarget,NULL);

HDC hDc = NULL;
if(FAILED(m_pDXGISurface->GetDC(TRUE,&hDc)))
    return E_FAIL;

COLORREF bla = SetPixel(hDc,1,1,RGB(255,255,255));
bool hmm = TextOutA(hDc, 10, 10, "LALALA!", 7);

if(FAILED(m_pDXGISurface->ReleaseDC(NULL)))
    return E_FAIL;
Run Code Online (Sandbox Code Playgroud)

问题是,在GDI绘图之后纹理仍然是空的(也用PIX测试).一切正常,没有错误消息.

我希望任何人都能解释它是如何运作的.

谢谢,斯特凡

编辑:尝试它GetDC(FALSE,&hDc)(根据文件):相同的结果 - >没有.

c++ gdi+ gdi directx-11 dxgi

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

D3D11:如何绘制一个简单的像素对齐线?

我试图用D3D11在两个顶点之间画一条线.我在D3D9和D3D11中有一些经验,但在D3D11中绘制一条线似乎是一个问题,它在一个给定像素中开始并以另一个结束.

我做了什么:

  1. 我将0.5f添加到每个顶点的像素坐标以适应纹理像素/像素坐标系统(我读取了Microsoft页面到D3D9和D3D11坐标系之间的差异):

    f32 fOff = 0.5f; ColoredVertex newVertices [2] = {{D3DXVECTOR3(fStartX + fOff,fStartY + fOff,0),vecColorRGB},{D3DXVECTOR3(fEndX + fOff,fEndY + fOff,0),vecColorRGB}};

  2. 生成正交投影矩阵以适合渲染目标:

    D3DXMatrixOrthoOffCenterLH(&MatrixOrthoProj,0.0F,(F32)uRTWidth,0.0F,(F32)uRTHeight,0.0F,1.0F); D3DXMatrixTranspose(&cbConstant.m_matOrthoProjection,&MatrixOrthoProj);

  3. 设置RasterizerState,BlendState,Viewport,......

  4. 绘制顶点为D3D11_PRIMITIVE_TOPOLOGY_LINELIST

问题:Line看起来像是一个像素.它从给定的像素坐标开始,非常适合它.线条的方向看起来是正确的,但我希望线条结束的像素仍然没有着色.看起来这条线只是一个像素来缩短...

是否有任何教程解释这个问题或者有没有人有同样的问题?我记得在D3D9中并不困难.

请询问您是否需要进一步的信息.

谢谢,斯特凡

编辑:找到d3d10的光栅化规则(对于d3d11应该是相同的):http: //msdn.microsoft.com/en-us/library/cc627092%28v=vs.85%29.aspx#Line_1

我希望这能帮助我理解......

c++ directx-11

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

标签 统计

c++ ×2

directx-11 ×2

dxgi ×1

gdi ×1

gdi+ ×1