設定
私はSystem.Windows.Forms.Form
ウィンドウソースとして使用しています。コンストラクタ:
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
フォームロード:
_Device = new Device(this, DeviceConfiguration.SelectConfiguration(Bits.Eight, Bits.Eight, Bits.Eight, Bits.Eight, Bits.Twentyfour, Bits.Eight, true, true), 1024, 768);
Debug.WriteLine(GL.GetString(GL.GL_EXTENSIONS));
base.OnLoad(e);
ロード方式では、実際に機能しているデバイス構成が選択されます。のような呼び出しGL.GetString(GL.GL_EXTENSIONS)
が機能しています。すべてのgl-methodsもロードされるため、使用されるすべてのメソッドがサポートされます。
フォーム表示:
Application.Initialize(this);
RenderSettings = new RenderSettings(this);
Debug.WriteLine("After setup render settings: " + GL.GetErrorDescription());
_Textures[0] = Resources.LoadTexture("Resources\\Buttons\\btn_big_bg_normal.dds");
_Textures[1] = Resources.LoadTexture("Resources\\Buttons\\btn_big_bg_normal.dds");
base.OnShown(e);
_IsShown = true;
使用Application.Initialize(this)
されるフレームワーク(私が作成)を初期化し、機能しているデフォルトのシェーダーと機能していないモデルも初期化します。これにより、返されるハンドルが無効であるため、後でレンダリングが失敗します。
フレームワーク
私は、OpenGL参照を何度も調べなくても開発を可能にするために、すべてのパラメーターの列挙型を持つ独自のOpenGLラッパーを持っています。例として、メソッドglGenBuffers
:
[MethodGL]
public delegate void glGenBuffers(Int32 count, ArrayBufferHandle[] buffers);
ArrayBufferHandle
定義:
/// <summary>
/// Represents a handle to a buffer
/// </summary>
[StructLayout(LayoutKind.Explicit, Size = 4)]
[ComVisible(true)]
public struct ArrayBufferHandle
{
[FieldOffset(0)]
UInt32 Handle;
/// <summary>
/// Determines if the buffer is valid
/// </summary>
public Boolean IsValid { get { return Handle > 0; } }
/// <summary>
/// Retrieves the default array buffer
/// <br>which is used to reset bindings</br>
/// </summary>
public static ArrayBufferHandle Default { get { return new ArrayBufferHandle(); } }
/// <summary>
/// Retrieves the string representation of the current object
/// </summary>
/// <returns>The current object represented as string</returns>
public override String ToString()
{
return String.Format("[ArrayBufferHandle Handle:{0} Valid:{1}]", Handle, IsValid);
}
}
もちろん、シェーダーの作成は機能しており、上記のようなタイプを使用します。
結論
私が直面した問題について、これ以上言うことはないと思います。glGenBuffers
ゼロをglGenTextures
返すと私は理由がわかりません。セットアップは私がすでに使用した他のもののようです。
もちろん、モデルをレンダリングしていないときはウィンドウが青い背景で表示され、を使用してもエラーは発生しませんglGetError
。