|
一个简单DX9HLSL代码,不知道什么地方出问题 [已解决]
就是想让输出颜色固定为白色 ……- Private Sub EffectTest()
- 'test only
- Dim s As String, ret As Long
- Dim buf As D3DXBuffer
- ''HLSL :-3
- s = s + "static const float4 color0={1.0f,1.0f,1.0f,1.0f};"
- s = s + "struct VS_OUTPUT{float4 Position : POSITION;float4 Diffuse: COLOR0;/*float2 TextureUV : TEXCOORD0;*/};"
- s = s + "struct PS_OUTPUT{float4 RGBColor : COLOR0;};"
- s = s + "VS_OUTPUT TestVS( float4 vPos : POSITION,float3 vNormal: NORMAL/*,float2 vTexCoord0 : TEXCOORD0*/){"
- s = s + "VS_OUTPUT Output;Output.Position=vPos;Output.Diffuse=color0;/*Output.TextureUV=vTexCoord0;*/return Output;}"
- s = s + "PS_OUTPUT TestPS( VS_OUTPUT In){PS_OUTPUT Output;Output.RGBColor=In.Diffuse;return Output;}"
- s = s + "technique Test{pass P0 {VertexShader=compile vs_2_0 TestVS();PixelShader = compile ps_2_0 TestPS();}}"
- s = s + vbNullChar
- s = StrConv(s, vbFromUnicode)
- 'create effect
- ret = D3DXCreateEffect(d3dd9, ByVal StrPtr(s), LenB(s), ByVal 0, ByVal 0, D3DXSHADER_DEBUG, Nothing, d3dxe, buf)
- If ret < 0 Then
- MsgBox "Can't create D3DXEffect!! &H" + Hex(ret)
- If Not buf Is Nothing Then
- ret = buf.GetBufferSize
- s = Space(ret)
- CopyMemory ByVal StrPtr(s), buf.GetBufferPointer, ret
- s = StrConv(s, vbUnicode)
- ret = InStr(1, s, vbNullChar)
- If ret > 0 Then s = Left(s, ret - 1)
- Debug.Print s
- End If
- Set d3dxe = Nothing
- Check1.Visible = False
- End If
- End Sub
复制代码 创建D3DXEffect倒是成功了,不启用HLSL可以正常显示,但是启用HLSL之后什么都没画出来:- With d3dd9
- .Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, &HFF000000, 1, 0
- .BeginScene
- .SetTransform D3DTS_WORLD, mat
- .SetFVF D3DFVF_MY_VERTEX
- If Not d3dxe Is Nothing And Check1.Value Then
- d3dxe.SetTechnique StrPtr(StrConv("Test", vbFromUnicode))
- d3dxe.Begin m, 0
- 'Debug.Assert m = 1
- d3dxe.BeginPass 0
- End If
- .DrawPrimitiveUP D3DPT_TRIANGLELIST, v.nCount, v.d(0), Len(v.d(0))
- If Not d3dxe Is Nothing And Check1.Value Then
- d3dxe.EndPass
- d3dxe.End
- End If
- .EndScene
- .Present ByVal 0, ByVal 0, 0, ByVal 0
- End With
复制代码 不知道是不是HLSL写错了,我照着M$的BasicHLSL乱写的 ……DrawPrimitiveUP出问题了……或者是不知道有没有人研究过DX9,不管是VB还是VC……
下面是工程的源码,注意:要想在VB6里面打开需要最新dx9vb.tlb文件( http://www.vbgood.com/viewthread.php?tid=80529 )才能打开……运行exe没有额外要求…… 问题出在VertexShader上面,太想当然了,直接返回位置了 应该在VertexShader里面写变换代码 不过不要VertexShader,只要PixelShader就没有问题了……
现在用Shader写了一个WMP的转移矩阵效果,几乎不用CPU……看图……
[ 本帖最后由 acme_pjz 于 2009-6-22 14:21 编辑 ] |
|