Вот есть код:
- Код: Выделить всё
Public Render As New Tasks.Task(AddressOf _Render)
Dim textur, render_tex As Texture
Dim sprite As Sprite
Dim effectx As Effect
Dim sur As Surface
Public Sub InitDX3D(ByVal Width As Integer, ByVal Heigth As Integer, ByVal FullScreen As Boolean, Form As IntPtr)
Try
deviceSetting.BackBufferCount = 2 'количество буферов
deviceSetting.DeviceWindowHandle = Form 'дескриптор окна для которого создается устройство
deviceSetting.SwapEffect = SwapEffect.Discard 'параметры перерисовки изображения
deviceSetting.PresentationInterval = PresentInterval.Default 'интервал смены буферов
If FullScreen = False Then
deviceSetting.Windowed = True
Else
deviceSetting.Windowed = False
deviceSetting.BackBufferWidth = Width 'горизонтальное разрешение экрана
deviceSetting.BackBufferHeight = Heigth 'вертикальное разрешение экранаn
deviceSetting.BackBufferFormat = Format.A8R8G8B8 'буферы имеют формат 32-bit
End If
Catch ex As Exception
Add(ex.Message)
End Try
Try
device = New Direct3D.Device(0, Direct3D.DeviceType.Hardware, Form, CreateFlags.HardwareVertexProcessing, deviceSetting)
Catch ex As Exception
Add(ex.Message)
End Try
End Sub
Public Function LoadTexture(ByVal file As String, Optional ByVal Format As Direct3D.Format = Direct3D.Format.A8R8G8B8) As Texture
Try
Return TextureLoader.FromFile(device, file, 0, 0, 0, Usage.None, Format, Pool.Managed, Filter.None, Filter.Linear, Nothing)
Catch ex As Exception
Add("Ошибка загрузки текстуры: " & "\texture\" & file)
Return TextureLoader.FromFile(device, "\texture\error.jpg", 0, 0, 0, Usage.None, Format, Pool.Managed, Filter.None, Filter.Linear, Nothing)
End Try
End Function
Public Sub Load()
sprite = New Sprite(device)
textur = LoadTexture("C:\Users\Иван\Documents\Visual Studio 2012\Projects\Next Time\Next Time\bin\Release\texture\tex2.png")
Dim fstr As String = ""
effectx = Effect.FromFile(device, "D:\convert1.fx", Nothing, Nothing, ShaderFlags.NotCloneable, Nothing, fstr)
If fstr <> "" Then Add(fstr)
effectx.ValidateTechnique("BAW")
effectx.Technique = "BAW"
End Sub
Private Sub _Render()
While 1
Try
With device
.Clear(ClearFlags.Target, 100, 0, 0)
.BeginScene()
effectx.Begin(FX.None)
effectx.BeginPass(0)
With sprite
x -= 0.001
.Begin(SpriteFlags.AlphaBlend)
.Transform = Matrix.Transformation2D(ZeroV2, 0, New Vector2(1, 1), ZeroV2, 0, ZeroV2)
.Draw(textur, ZeroV3, ZeroV3, System.Drawing.Color.White.ToArgb)
.End()
End With
effectx.EndPass()
effectx.End()
.EndScene()
.Present()
End With
Catch ex As Exception
Add(ex.Message)
Exit While
End Try
End While
End Sub
А вот код шейдера:
- Код: Выделить всё
sampler Texture0;
float4 ps_main(float4 color:TEXCOORD) : COLOR
{
return float4(1.0,1.0,1.0,1.0);
}
technique BAW
{
pass Pass1
{
PixelShader = compile ps_2_0 ps_main();
}
}
Это просто проверочный вариант, возвращающий белый цвет.
Я думаю, что не работает по тому что в шейдер не передается текстура, на XNA использовались методы SetRenderTarget. Как на MDX можно рендерить в текстуру и передать ее в шейдер?
Вот код на XNA:
- Код: Выделить всё
BackTexture = Resource.Content.Load(Of Texture2D)("Map\\" & Name & "\back")
BackState = New RenderTarget2D(graphics.GraphicsDevice, Settings.Resolution.X, Settings.Resolution.Y)
graphics.GraphicsDevice.SetRenderTarget(BackState)
graphics.GraphicsDevice.Clear(Color.Black)
spriteBatch.Begin(0, BlendState.Opaque, Nothing, Nothing, Nothing, Effect)
spriteBatch.Draw(BackTexture, Vector2.Zero, BackColor)
spriteBatch.End()
graphics.GraphicsDevice.SetRenderTarget(Nothing)
Помогите пожалуйста!