在SDL2中加载像素着色器失败

时间:2017-04-16 09:11:41

标签: c++ directx sdl-2 direct3d

我一直在尝试在SDL_render_d3d.c中实现Yuv422到RGB像素着色器转换。我无法获得与此相同的编译代码格式,使用了数组const DWORD shader_data[],这种方法很好但是是420转换器,源代码和汇编程序与编译所需的命令行一起列出源到汇编程序。

当我使用fxc编译着色器(.hlsl)时,我得到一个带有字节代码的头文件,以“DXBC”开头,据我所知,很多googling是hlsl字节代码的前缀。我还尝试在运行时从文件中进行编译,这也会创建一个包含相同内容的缓冲区。

当我尝试从此创建PixelShader时,它失败,代码为0x8876086c,

有谁知道如何创建DWORD格式的即用型格式?这似乎是最简单的前进方式

工作格式:

    const DWORD shader_data[] = {
        0xffff0200, 0x05000051, 0xa00f0000, 0xbd808081, 0xbf008081, 0xbf008081,
        ....... };

生成的fxc格式不起作用:

const BYTE g_YuvToRgb[] =
{
     68,  88,  66,  67,  25, 203, 
     28,  33,  88, 181, 245, 169,
     ...... }; 

1 个答案:

答案 0 :(得分:0)

没有真正的理由将着色器保留为DWORD的数组,只需将带有着色器的指针强制转换为DWORD *,并确保缓冲区大小为sizeof(DWORD)的多个(它应该是)。错误代码0x8876086cD3DERR_INVALIDCALL,因此您的编译着色器可能由于某种原因无法使用。你怎么编译它?您是否指定了所需的着色器模型?