質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

Q&A

解決済

2回答

884閲覧

自作フレームワークのエントリーポイントをシンプルにする方法

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

0グッド

0クリップ

投稿2021/06/17 08:54

編集2021/06/17 09:36

提示コードですが現在ウインドウコンテキスト変数であるwindow変数なのですがこれをフレームワーク側でいじることにしてプログラム側では見ないように隠したいのですがこれはどういった事をすれば隠せるのでしょうか?

現状: [ ウインドウコンテキスト変数を各描画クラスの引数に入れて使ってるがそれが一々面倒でなおかつ使う場面がない ]

やりたいこと「window変数(ウインドウコンテキスト変数)をどうにかしてフレームワーク側に持っていきたい。プログラム側では触らないようにする方法が知りたい。」

cpp

1int main() 2{ 3 FrameWork::Init(); //初期化 4 std::shared_ptr<FrameWork::Window> window = std::make_shared<FrameWork::Window>(48 * 26,48 * 18,"Dungeon"); //ウインドウコンテキスト 5 FrameWork::setVersion(4,5); //バージョン設定 6 while (*window) 7 { 8 window->FrameUpdate(); 9 glClearColor(0.0f,0.0f,0.0f,1.0f); 10 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 11 12 //Entry 13 14 window->SwapBuffers(); 15 window->Wait(); 16 } 17 return 0; 18}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/17 09:32

初心者マークがついているので、初心者だと思いますが、 発生している問題・課題は何でしょうか。 嫌だと感覚的な理由で、方法も思いついていないのであれば、 あえてそういうことはしないでいいと思いますが。
退会済みユーザー

退会済みユーザー

2021/06/17 09:41

文章を修正しました。
退会済みユーザー

退会済みユーザー

2021/06/17 09:46

> 現状: [] > やりたいこと「」 以前も書きましたが、上記のように意味の分からない使い分けをした括弧書きするぐらいなら、 改行で区切るかMarkdownを使って書いてください。 行頭もずれていたりと、正直読み辛いです。
fana

2021/06/17 09:48

> なおかつ使う場面がない 使わないなら渡さなくてよいのでは…???
guest

回答2

0

ベストアンサー

質問中のコードであれば、複数のウィンドウを持つことはなさそうなので、
ウインドウコンテキスト変数をグローバル変数としてフレームワーク側で持ち、
フレームワーク内ではそのグローバル変数を使うようにすればいいのではないでしょうか。

投稿2021/06/17 09:48

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/17 09:50

なるほど。例えばですが複数ある場合はどうするのでしょうか?
退会済みユーザー

退会済みユーザー

2021/06/17 09:54

質問中のコードにないのでそんなこと、知りません。 逆に聞きますが、どういう場面で複数使うんですか?
fana

2021/06/17 10:01

どういう場面って,「ウィンドウをたくさん出したい」とかじゃないすか? でも最初はとりあえず単一限定版で作ってみた方が良さそう.
退会済みユーザー

退会済みユーザー

2021/06/17 10:37

> どういう場面って,「ウィンドウをたくさん出したい」とかじゃないすか? フレームワークとしてそれを想定しているのかの確認を兼ねて聞いたものです。 フレームワークを提供する側として、使用する場面を想定していないのであれば、 使用方法として制限してしまう方が手っ取り早いので。 グローバル変数も初心者マークのついた質問者が実装できそうなラインを考えた結果です。
fana

2021/06/17 10:43

たしかに main.cpp と FrameWork.cpp の2つの翻訳単位を用意して, 「フレームワーク」が管理するものは全て FrameWork.cpp 内の内部リンケージな外部変数にでもして, main.cpp からは FrameWork.h で公開された関数しか呼ばない. (変数をexternとか言わない) ……という形から始めた方が良さそう.
guest

0

フレームワーク側でいじることにしてプログラム側では見ないように隠したい

例えば,

FrameWork::CreateWindow( 引数群 ); とかいうメソッド(関数?)を使ったら,
フレームワーク側があれこれ必要なものを作って内部で 保持/管理 するよ

とかいう話にすればよいのではないでしょうか.


あと,機能を実装した型のオブジェクト自体を返すんじゃなくて,内側にあるそういった物を指し示すための「ハンドル」を返すみたいな形もありますね.
(質問者が知っていそうなところだと,Win32 とか DxLib とかはそんなですね.OpenGLだって「よくわからん値」を返してくるよね)

投稿2021/06/17 09:47

編集2021/06/17 09:59
fana

総合スコア11954

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/17 09:48

なるほど。ループ類はどうすればいいのでしょうか?
fana

2021/06/17 09:53 編集

「どうすれば」と言われても,何が問題なのかがわからないが, なんだったらもう,メインループをフレームワークの利用側が書く形じゃなくて,フレームワークの内側に突っ込めばいいんじゃない? FrameWork::MainLoop( 必要な引数があれば ){ 内側にメインのwhileループ } みたいな. これだと,このメソッド(なのか関数なのか)のローカル変数の寿命を 「メインループを開始するよりも前 ~ メインループが終わるまで」 にできるんで,いろいろ楽かもね. > FrameWork::Init(); なんてやつも,わざわざ利用側で呼ばせなくとも,このメソッド内の先頭で勝手にコールすればいいかもしれないし.
退会済みユーザー

退会済みユーザー

2021/06/17 10:13

なるほど。質問ですが > フレームワーク側があれこれ必要なものを作って内部で 保持/管理 するよ 文ですがextern でウインドウコンテキスト変数を持たせればいいのでしょか?例として
fana

2021/06/17 10:18

何故 extern が出てくるのか(どういう形を考えているのか)がわからないが, とにかく「フレームワーク」を使う側から手を出せない箇所に変数を作るなりすればよいのでは.
退会済みユーザー

退会済みユーザー

2021/06/17 10:23

なるほど。わかりました。フレームワーク .libファイルのポインタ変数を getContext();関数等で拾えるのでしょうか?やりましたが未定義の参照と表示されます。
fana

2021/06/17 10:28

> getContext();関数 これは何?
退会済みユーザー

退会済みユーザー

2021/06/17 10:29

ウインドウコンテキストを取得する関数です。フレームワーク側ではどういう変数でウインドウコンテキストのデータを持たせるべきなのでしょうか?
fana

2021/06/17 10:36

(好きな型で,好きな形で,好きなところに 持てばいいじゃん……)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問