私は2つのリソース管理クラスを持っていますDeviceContext
とOpenGLContext
はともにclass DisplayOpenGL
のメンバです。リソースの寿命はDisplayOpenGL
に固定されています。初期化は、この(擬似コード)のようになります。C++ - クラスメンバを初期化する前に関数を実行する
class DisplayOpenGL {
public:
DisplayOpenGL(HWND hwnd)
: m_device(hwnd),
// <- Must call m_device.SetPixelFormat here ->
m_opengl(m_device) { };
private:
DeviceContext m_device;
OpenGLContext m_opengl;
};
:私は
DisplayOpenGL
c'torの初期化子リストでそれを行うことはできませんので、
DeviceContext m_device = DeviceContext(hwnd);
m_device.SetPixelFormat();
OpenGLContext m_opengl = OpenGLContext(m_device);
問題は、SetPixelFormat()の呼び出しです私が見ることができる
ソリューション:
- が
m_dummy(m_device.SetPixelFormat())
を挿入するには、 - (SetPixelFormatとして動作しません)何RETVALを持っていません。 (リトバルがあればこれを行うべきですか?) OpenGLContext m_opengl;
の代わりにunique_ptr<OpenGLContext> m_opengl;
を使用してください。
が続いm_opengl()
として初期化し、c'tor本体にSetPixelFormat()を呼び出し、DeviceContext
c'tor
これらのソリューションのが望ましいと理由からm_opengl.reset(new OpenGLContext);
SetPixelFormat()
を使うのか?私が紛失しているものは何ですか? Windows上でVisual Studio 2010 Expressを使用しています(問題がある場合)。
編集:私は主に、これらの方法のいずれかを決定する際のトレードオフに関心があります。私が代わりに「ノーマル」X m_x
メンバーのそれを使用するとき -
m_dummy()
はそれだろうunique_ptr<X>
は私に興味がある場合でも、仕事と洗練思わないのでしょうか? 2つのメソッドは、初期化の問題を除いて、機能的に多かれ少なかれ同等のようです。SetPixelFormat()
をDeviceContext
から呼び出すと確かに動作しますが、私には汚れているように感じます。DeviceContext
は、リソースを管理し、その使用を有効にする必要があります。ユーザーにランダムなピクセル形式のポリシーを適用する必要はありません。- stijn's
InitDev()
は最もクリーンなソリューションのようです。
とにかく、このような場合にスマートポインタベースのソリューションがほしいと思っていますか?
を呼び出すことも、初期化を行うにはOpenGLContextクラスのメソッド
CreateRenderingContext
を作成したいです。 – cdhowieあなたの3番目のソリューションがうまくいくように思えます。あなたが選んだ理由はありますか?また、GLFWのようなライブラリを使用してOpenGLコンテキストをロードしてみませんか? –
私が始めた時、私はGLFWを知らなかった。見ていただき、ありがとうございます。 –