Moin!
Hab jetzt mal versucht mit DirectX anzufangen, aber ich krieg es noch nicht mal hin, ein Dreieck darzustellen:
(trotz Buch-Anleitung)
Da kommen dann vor Start folgende Fehlermeldungen:
System.InvalidOperationException wurde nicht behandelt.
Message="Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Fehler in der Anwendung.."
Source="DirectX"
StackTrace:
bei WindowsApplication1.My.MyProject.MyForms.Create__Instance__[T](T Instance) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 190.
bei WindowsApplication1.My.MyProject.MyForms.get_Form1()
bei WindowsApplication1.My.MyApplication.OnCreateMainForm() in (...)\Application.Designer.vb:Zeile 35.
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
bei WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException: Microsoft.DirectX.Direct3D.InvalidCallException
Message="Fehler in der Anwendung."
Source="Microsoft.DirectX.Direct3D"
ErrorCode=-2005530516
ErrorString="D3DERR_INVALIDCALL"
StackTrace:
bei Microsoft.DirectX.Direct3D.Device.DrawPrimitives(PrimitiveType primitiveType, Int32 startVertex, Int32 primitiveCount)
bei WindowsApplication1.Form1.Render() in (...)\Form1.vb:Zeile 60.
bei WindowsApplication1.Form1..ctor() in (...)\Form1.vb:Zeile 40.
InnerException:
nach Klick auf Weiter:
LoaderLock wurde erkannt.
Message: Die DLL "C:\Windows\assembly\GAC\Microsoft.DirectX.Direct3DX\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.Direct3DX.dll" unternimmt einen Versuch, innerhalb der Sperre für den OS-Loader eine verwaltete Ausführung durchzuführen. Versuchen Sie nicht, verwalteten Code innerhalb einer DllMain- oder Bildinitialisierungsfunktion auszuführen, da dies ein Hängen der Anwendung zur Folge haben kann.
Hab jetzt mal versucht mit DirectX anzufangen, aber ich krieg es noch nicht mal hin, ein Dreieck darzustellen:
(trotz Buch-Anleitung)
VB.NET-Quellcode
- Imports Microsoft.DirectX
- Imports Microsoft.DirectX.Direct3D
- Imports System.IO
- Public Class Form1
- Dim Direct3dDevice As Device
- Dim vbBuffer_Dreieck As Direct3D.VertexBuffer = Nothing
- Public Sub oncreateDevice(ByVal sender As Object, ByVal e As EventArgs)
- Dim dev As Direct3D.Device = CType(sender, Direct3D.Device)
- vbBuffer_Dreieck = New Direct3D.VertexBuffer(GetType(Direct3D.CustomVertex.TransformedColored), 3, dev, 0, Direct3D.CustomVertex.TransformedColored.Format, Direct3D.Pool.Default)
- AddHandler vbBuffer_Dreieck.Created, AddressOf Me.oncreatevertexbuffer
- Me.oncreatevertexbuffer(vbBuffer_Dreieck, Nothing)
- End Sub
- Public Sub oncreatevertexbuffer(ByVal sender As Object, ByVal e As EventArgs)
- Dim vb As Direct3D.VertexBuffer = CType(sender, Direct3D.VertexBuffer)
- Dim verts As Direct3D.CustomVertex.TransformedColored() = CType(vb.Lock(0, 0), Direct3D.CustomVertex.TransformedColored())
- verts(0).X = 150
- verts(0).Y = 50
- verts(0).Z = 0.5F
- verts(0).Rhw = 1
- verts(0).Color = System.Drawing.Color.Brown.ToArgb()
- verts(1).X = 250
- verts(1).Y = 250
- verts(1).Z = 0.5F
- verts(1).Rhw = 1
- verts(1).Color = System.Drawing.Color.LightPink.ToArgb()
- verts(2).X = 50
- verts(2).Y = 250
- verts(2).Z = 0.5F
- verts(2).Rhw = 1
- verts(2).Color = System.Drawing.Color.LightPink.ToArgb()
- End Sub
- Sub New()
- InitializeComponent()
- CreateDirect3DDevice(Me)
- Render()
- End Sub
- Public Function CreateDirect3DDevice(ByVal ByValHandle As Form) As Boolean
- Try
- Dim presentParams As New Direct3D.PresentParameters()
- presentParams.Windowed = True
- presentParams.SwapEffect = Direct3D.SwapEffect.Discard
- Direct3dDevice = New Direct3D.Device(0, Direct3D.DeviceType.Hardware, Handle, Direct3D.CreateFlags.HardwareVertexProcessing, presentParams)
- Return True
- Catch ex As DirectXException
- Return False
- End Try
- Render()
- End Function
- Private Sub Render()
- Direct3dDevice.Clear(Direct3D.ClearFlags.Target, System.Drawing.Color.Blue, 1.0F, 0)
- Direct3dDevice.BeginScene()
- Direct3dDevice.SetStreamSource(0, vbBuffer_Dreieck, 0)
- Direct3dDevice.VertexFormat = Direct3D.CustomVertex.TransformedColored.Format
- Direct3dDevice.DrawPrimitives(Direct3D.PrimitiveType.TriangleList, 0, 1)
- Direct3dDevice.EndScene()
- Direct3dDevice.Present()
- End Sub
- End Class
Da kommen dann vor Start folgende Fehlermeldungen:
System.InvalidOperationException wurde nicht behandelt.
Message="Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Fehler in der Anwendung.."
Source="DirectX"
StackTrace:
bei WindowsApplication1.My.MyProject.MyForms.Create__Instance__[T](T Instance) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 190.
bei WindowsApplication1.My.MyProject.MyForms.get_Form1()
bei WindowsApplication1.My.MyApplication.OnCreateMainForm() in (...)\Application.Designer.vb:Zeile 35.
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
bei WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException: Microsoft.DirectX.Direct3D.InvalidCallException
Message="Fehler in der Anwendung."
Source="Microsoft.DirectX.Direct3D"
ErrorCode=-2005530516
ErrorString="D3DERR_INVALIDCALL"
StackTrace:
bei Microsoft.DirectX.Direct3D.Device.DrawPrimitives(PrimitiveType primitiveType, Int32 startVertex, Int32 primitiveCount)
bei WindowsApplication1.Form1.Render() in (...)\Form1.vb:Zeile 60.
bei WindowsApplication1.Form1..ctor() in (...)\Form1.vb:Zeile 40.
InnerException:
nach Klick auf Weiter:
LoaderLock wurde erkannt.
Message: Die DLL "C:\Windows\assembly\GAC\Microsoft.DirectX.Direct3DX\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.Direct3DX.dll" unternimmt einen Versuch, innerhalb der Sperre für den OS-Loader eine verwaltete Ausführung durchzuführen. Versuchen Sie nicht, verwalteten Code innerhalb einer DllMain- oder Bildinitialisierungsfunktion auszuführen, da dies ein Hängen der Anwendung zur Folge haben kann.