小编jhe*_*iko的帖子

DirectX 11帧缓冲捕获(C++,无Win32或D3DX)

我想使用DirectX 11将前端或后端缓冲区的内容捕获到一个字节数组中,然后我可以将其用作纹理或创建文件的源.我有一个交换链设置,很多渲染发生和到目前为止的以下代码 - 我确保在调用Present后调用.

ID3D11Texture2D* pSurface;
HRESULT hr = m_swapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), reinterpret_cast< void** >( &pSurface ) );
if( pSurface )
{
    const int width = static_cast<int>(m_window->Bounds.Width * m_dpi / 96.0f);
    const int height = static_cast<int>(m_window->Bounds.Height * m_dpi / 96.0f);
    unsigned int size = width * height;
    if( m_captureData )
    {
        freeFramebufferData( m_captureData );
    }
    m_captureData = new unsigned char[ width * height * 4 ];

    ID3D11Texture2D* pNewTexture = NULL;

    D3D11_TEXTURE2D_DESC description =
    {
        width, height, 1, 1, …
Run Code Online (Sandbox Code Playgroud)

c++ directx graphics directx-11

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

为什么printf显示-1.#IND用于FPTAN结果?

我正在研究一个从表达式生成汇编代码的程序.所需的功能之一是tan(x),它目前使用以下代码序列工作(地址在运行时填写):

fld [0x00C01288];
fld st(0);
fsin;
fld st(1);
fcos;
fdivp;
fst [0x0030FA8C];
Run Code Online (Sandbox Code Playgroud)

但是,我想使用FPTAN操作码,所以我尝试使用以下代码:

fld [0x00C01288];
fptan;
fincstp;
fst [0x0030FA8C];
Run Code Online (Sandbox Code Playgroud)

测试程序使用printf显示存储在0x30FA8C的结果,但是对于第二个序列,结果显示为-1.#IND(第一个使用cos和sin工作正常).如果我尝试检查内存地址或浮点堆栈顶部的值,在调试器中,它将显示为正确的数字.

所以,我的问题是:为什么printf显示-1.#IND,我该如何解决?

0x00C01288的值为双精度0.5.两种情况下的结果均为~0.5463024898

我的第一个想法是存储的值是相同数字的不同表示,但检查存储在0x0030FA8C的值在两种情况下都显示为0x3FE17B4F5BF3474A.

我不明白为什么printf函数的相同输入会产生不同的输出......

任何帮助或建议将不胜感激.

编辑:调用printf的源:

#include "FridgeScript.h"
#include <stdio.h>
#include <math.h>

char test[] = "a=tan(0.5);";

int main(int c, char** s)
{
    unsigned int SC = FSCreateContext();

    double a = 0.0;
    FSRegisterVariable(SC, "a", &a);

    unsigned int CH = FSCompile(SC, test);
    if(CH) FSExecute(SC, CH);

    printf("a: %.10g\r\n", a);
    printf("hex a: %I64X", a);

    FSDestroyContext(SC);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ floating-point x86 assembly

2
推荐指数
1
解决办法
1137
查看次数

标签 统计

c++ ×2

assembly ×1

directx ×1

directx-11 ×1

floating-point ×1

graphics ×1

x86 ×1