2 つの別個の WPF プロジェクトがあります。私の目標: プロジェクト B を変更して、プロジェクト A と同じ OpenGL オブジェクト インスタンス バージョンを持つようにします。
両方とも、次の行を使用して、ある時点で変数「gl」をインスタンス化します。
OpenGL gl = args.OpenGL;
ブレークポイントを設定し、そのオブジェクト プロパティの 'gl' を確認した後、プロジェクト A に次のように表示されます。
Version = "4.4.13084 Compatibility Profile Context 14.301.1001.0"
しかし、プロジェクト B では、次のように表示されます。
Version = "1.1.0"
「args」に関して、両方のプロジェクトは次の方法で gl をインスタンス化します。
private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
どちらのプロジェクトも、次の方法でそのメソッドを呼び出します。
((SharpGL.WPF.OpenGLControl)(target)).OpenGLInitialized += new SharpGL.SceneGraph.OpenGLEventHandler(this.OpenGLControl_OpenGLInitialized);
ここから「args」が明示的に渡されていないことに注意してください。関数は、OpenGLEventHandler のようなより深いコンテキストで呼び出す必要があると考えました。ただし、 args もその関数のパラメーターであることに気付きました。
public delegate void OpenGLEventHandler(object sender, OpenGLEventArgs args);
SceneGraph.dll にあるため、OpenGLEventHandler のソース コードにアクセスできません。
私のプロジェクトはVisual Studioから実行されるWPFであるため、args変数が.configまたは.xamlファイルによって決定されるかどうか疑問に思っています。ただし、OpenGL に関するファイルには大きな違いはありません。
プロジェクト A の MainWindow.xaml:
<Window x:Class="ObjectLoadingSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Object LoadingSample" Height="600" Width="800"
xmlns:sharpGL="clr-namespace:SharpGL.WPF;assembly=SharpGL.WPF">
<Grid>
<DockPanel>
<ToolBarPanel DockPanel.Dock="Top">
<Menu>
<MenuItem Header="_File">
<MenuItem x:Name="fileOpenItem" Header="_Open..." Click="fileOpenItem_Click" />
</MenuItem>
</Menu>
</ToolBarPanel>
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<Label Target="{Binding ElementName=textBoxScale}">Scale: </Label>
<TextBox x:Name="textBoxScale" Width="60" IsEnabled="False">1</TextBox>
<CheckBox x:Name="checkBoxAutoScale" IsChecked="True" IsEnabled="False">Auto</CheckBox>
<Separator />
<Label Target="{Binding ElementName=comboBoxRenderMode}">Render Mode: </Label>
<ComboBox x:Name="comboBoxRenderMode" Width="100" SelectedIndex="1">
<ComboBoxItem>Immediate</ComboBoxItem>
<ComboBoxItem>Retained</ComboBoxItem>
</ComboBox>
<Label Target="{Binding ElementName=comboBoxPolygonMode}">Polygon Mode:</Label>
<ComboBox x:Name="comboBoxPolygonMode" Width="100" SelectedIndex="2" SelectionChanged="comboBoxPolygonMode_SelectionChanged">
<ComboBoxItem>Points</ComboBoxItem>
<ComboBoxItem>Lines</ComboBoxItem>
<ComboBoxItem>Polygons</ComboBoxItem>
</ComboBox>
</ToolBar>
</ToolBarTray>
<sharpGL:OpenGLControl x:Name="openGlCtrl"
OpenGLDraw="OpenGLControl_OpenGLDraw" OpenGLInitialized="OpenGLControl_OpenGLInitialized"
RenderContextType="FBO" Resized="OpenGLControl_Resized" />
</DockPanel>
</Grid>
</Window>
プロジェクト B の MainWindow.xaml
<Window x:Class="ProjectBeta.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sharpGL="clr-namespace:SharpGL.WPF;assembly=SharpGL.WPF"
Title="MainWindow" Height="800" Width="800">
<Grid>
<sharpGL:OpenGLControl OpenGLDraw="OpenGLControl_OpenGLDraw" OpenGLVersion="OpenGL4_3" OpenGLInitialized="OpenGLControl_OpenGLInitialized" DrawFPS="True" Margin="-3,0,3,0" />
</Grid>
</Window>
App.config、App.xaml、Settings.settings などのファイルは他にもありますが、どのファイルを共有するのが最も役立つかはわかりません。