D3D9中SetVertexShaderConstantF的使用方法

weixin_38050362 2017-11-27 06:46:09
--------背景------------------------------
我在开发一个的sdk,其中有一个模块使用了D3D9的hlsl硬件加速渲染,提供给用户的是以dll的形式,但是代码中并非纯粹的D3D9,带入了D3DX43.dll,主要使用了D3DXCompileShader函数和D3DXSaveTexturetoMem函数
----------问题----------------------------
问题1:如果在我发布的sdk中携带了D3DX9_43.dll,是否属于侵犯了微软的私有财产
问题2:如果不使用D3DXCompileShader,转而使用D3DCompile函数,那么将携带D3DCompiler_43.dll,
          这个dll是否侵犯了微软的私有财产
=================分析与描述========================
为了不使用这两个DLL,我采用了事先编译HLSL成二进制码的方法,将二进制码和hlsl的源代码(char*格式),直接放在源代码中
但是没有了D3DX的ID3DXConstantTable,只能直接使用D3D9Device的SetVertexShaderConstantF接口。
同时自己也需要对hlsl的代码进行解析
------hlsl code--------------------------------------------
        
char* g_cBaseVert =
    "struct VS_INPUT"
    "{"
    "    float4 iPos       : POSITION0;"
    "    float2 iTex       : TEXCOORD0;"
    "};"

    "struct VS_OUTPUT"
    "{"
    "    float4 oPos       : POSITION0;"
    "    float2 oTex       : TEXCOORD0;"
    "};"

    //"float4x4 MVP;"


    "float4x4 Model;"
    "float4x4 View;"
    "float4x4 Proj;"

    "VS_OUTPUT Main(VS_INPUT input)"
    "{"
    "     VS_OUTPUT output  = (VS_OUTPUT)0;"

    //"     output.oPos       = mul(input.iPos, MVP);"


    "     output.oPos       = mul(input.iPos, Model);"
    "     output.oPos       = mul(output.oPos, View);"
    "     output.oPos       = mul(output.oPos, Proj);"

    "   output.oTex    = input.iTex;"
    "    return output;"

    "}";
-----------------------------------------------------
以上是一段简单的顶点着色器代码,那么我该如何调用SetVertexShaderConstantF接口呢
我尝试直接在外部计算MVP矩阵,传入着色器SetVertexShaderConstantF(0,mvp,4),是没问题的
但是使用以下代码,分别传入Model View Proj就会有问题
SetVertexShaderConstantF(0,Model,4)
SetVertexShaderConstantF(4,View,4)
SetVertexShaderConstantF(8,Proj,4)
我无法得知内部的寄存器和矩阵的对应关系:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb172943(v=vs.85).aspx
阅读了
...全文
9 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

435

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧