none
求高手解答!vs2012编译3d程序是出现问题 编译环境是vs2012+dx11.0 win7家庭普通版64位4g内存 RRS feed

  • 问题

  • 代码:

       static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                //Application.Run(new Form1());
                using (Form1 frm = new Form1())
                {
                    if (!frm.InitializeGraphics())
                    {
                        MessageBox.Show("jgdhuh");
                        return;
                    }
                    frm.Show();
                    while (frm.Created)
                    {
                        frm.Render();
                    }
                    Application.DoEvents();
                }
            }
        }
    }

     

     

    using Microsoft.DirectX;
    using Microsoft.DirectX.Direct3D;

    namespace WindowsFormsApplication14
    {
        public partial class Form1 : Form
        {
            private Device device = null;
            bool pasue = false;
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {

            }


            public bool InitializeGraphics()
            {
                try
                {
                    PresentParameters presentParameters = new PresentParameters();
                    presentParameters.Windowed = true;
                    presentParameters.SwapEffect = SwapEffect.Discard;
                    presentParameters.EnableAutoDepthStencil = true;
                    presentParameters.AutoDepthStencilFormat = DepthFormat.D16;

                    device = new Device(0,DeviceType.Hardware,this,CreateFlags.SoftwareVertexProcessing,presentParameters);

                    device.DeviceReset += new System.EventHandler(this.OnResetDevice);
                    this.OnCreateDevice(device, null);
                    this.OnResetDevice(device, null);
                }
                catch
                {
                    return false;
                }
                return true;
            }
            public void OnCreateDevice(object sender, EventArgs e)
            {
                //empty
            }
            public void OnResetDevice(object sender, EventArgs e)
            {
                //empty
            }
            public void Render()
            {
                if (device == null)
                {
                    return;
                }
                device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0);
                device.BeginScene();
                device.EndScene();
                device.Present();
            }

            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                this.Render();
            }

            private void Form1_Resize(object sender, EventArgs e)
            {
                pasue = ((this.WindowState == FormWindowState.Minimized) || !this.Visible);
            }

        }
    }http://b.hiphotos.baidu.com/zhidao/pic/item/0eb30f2442a7d9334934b9fcad4bd11372f001a4.jpg
    2012年10月16日 3:17

全部回复

  • Hi 只想一个人飞,

      你可以去App Hub询问关于游戏图形开发的相关问题,http://forums.create.msdn.com/forums/,里面有更多的专家可以回答你的问题。

     



    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月18日 3:18
  • 我现在也在学习C#与DirectX,网上的那个“用C#进行directx开发的一个简单例子”里面的程序,调试的时候总是停在“using (Form1 frm = new Form1())”
    2013年1月20日 10:51
  • 这个问题今天解决了,解决步骤如下:

    1:选择FORM1的属性,在属性对话框的ApplicationSetttings选择下随便创建一个设置。然后退出此对话框,系统即产生一个应用程序配置文件app.config。

    2.将app.config里面的内容改为一下:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
                <section name="OpenAWindow.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <userSettings>
            <OpenAWindow.Properties.Settings>
                <setting name="formState" serializeAs="String">
                    <value>Maximized</value>
                </setting>
            </OpenAWindow.Properties.Settings>
        </userSettings>
        <startup useLegacyV2RuntimeActivationPolicy="true">
            <supportedRuntime version="v4.0"/>
        </startup>
    </configuration>

    3.进行调试,如果出现一下问题:

    DLL“...........Microsoft.DirectX.Direct3D.dll”正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。

    那么:

    把vs2005菜单的 调试->异常->Managed Debuggin Assistants->LoaderLock 的选中状态去掉 
    如果异常(exception)这一项没有的话,在工具---自定义---命令选项卡---左边选择调试--右边把异常托到菜单里 

    快捷键Ctrl+Alt+E,修改Managed Debuggin Assistants->LoaderLock 的选中状态去掉

    4.再进行调试,应该可以了。

    2013年1月22日 2:08