D3D9中SetVertexShaderConstantF的使用方法
--------背景------------------------------
我在开发一个的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
阅读了