提示コードのコメント部の囲ってるコードですが以下の変数なのですが
static FrameWork::windowContext
void Init();関数でmake_unique()されてその関数を抜けると次のMain関数でNULLになってしまうのですがこれはなぜでしょうか?
スマートポインタを使ったstatic 変数なのですが変数は生きてても生存期間は終了しているためNULLになるのでしょか?
cpp
1#include "FrameWork.hpp" 2#include "Resource.hpp" 3 4#include <iostream> 5#include "FrameWork.hpp" 6#include "Player.hpp" 7 8 9int main() 10{ 11//////////////////////////////////////////////////////////////////////////////////////////////////////// 12 if (FrameWork::Init(glm::ivec2(48 * 26, 48 * 18), glm::ivec2(4, 5), "Dungeon") == false) 13 { 14 std::cerr << "初期化エラー" << std::endl; 15 } 16/////////////////////////////////////////////////////////////////////////////////////////////////////// 17 std::vector<FrameWork::Resource::Resource_File> file(0); 18 file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicMono_2D.vert",FrameWork::Resource::Asset::shader_BasicMono_vert }); 19 file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicMono_2D.frag",FrameWork::Resource::Asset::shader_BasicMono_frag }); 20 file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicText_2D.vert",FrameWork::Resource::Asset::shader_BasicText_vert }); 21 file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicText_2D.frag",FrameWork::Resource::Asset::shader_BasicText_frag }); 22 file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicTexture_2D.vert",FrameWork::Resource::Asset::shader_BasicTexture_vert }); 23 file.push_back(FrameWork::Resource::Resource_File{ "Shader/2D/BasicTexture_2D.frag",FrameWork::Resource::Asset::shader_BasicTexture_frag }); 24 //file.push_back(FrameWork::Resource::Resource_File{ "Assets/debug_texture.png",FrameWork::Resource::Asset::player }); 25 file.push_back(FrameWork::Resource::Resource_File{ "Assets/texture_1.png",FrameWork::Resource::Asset::player }); 26 27 FrameWork::Resource::InputFile_Ok(file); 28 FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicMono_vert); 29 FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicMono_frag); 30 FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicText_vert); 31 FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicText_frag); 32 FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicTexture_vert); 33 FrameWork::Resource::LoadShader(FrameWork::Resource::Asset::shader_BasicTexture_frag); 34 FrameWork::Resource::LoadTexture(FrameWork::Resource::Asset::player); 35 36 Player player; 37///////////////////////////////////////////////////////////////////////////////////////// 38 if (FrameWork::windowContext == NULL) 39 { 40 std::cout << "ああああ" << std::endl; 41 } 42//////////////////////////////////////////////////////////////////////////////////////// 43 while (*FrameWork::windowContext) 44 { 45 // FrameWork::windowContext->FrameUpdate(glm::vec4(0, 0, 0, 255.0f)); //フレーム更新 46 47 //player.Update(); 48 //player.Draw(); 49 50 51 //FrameWork::windowContext->SwapBuffers(); //ダブルバッファリング 52 //FrameWork::windowContext->Wait(); //フレームレート制御 53 } 54 55 56 return 0; 57} 58
cpp
1#include "Init.hpp" 2 3#include <glew/include/GL/glew.h> 4#include <glfw/include/GLFW/glfw3.h> 5 6#include "Window.hpp" 7 8namespace FrameWork 9{ 10 // ##################################### 初期化 ##################################### 11 bool Init(glm::ivec2 size,glm::ivec2 ver, const char* title) 12 { 13 setlocale(LC_CTYPE, ""); //ローカルを設定 14 15 16 if (glfwInit() == GL_FALSE) 17 { 18 std::cerr << "glfw初期化失敗。" << std::endl; 19 return false; 20 } 21 22/////////////////////////////////////////////////////////////////////////////////////////////////// 23 FrameWork::windowContext = std::make_unique<Window>(size, title); //ウインドウコンテキストを生成 24 25 if (FrameWork::windowContext == NULL) 26 { 27 std::cout << "ううううう" << std::endl; 28 } 29 30 std::cout << "yyy" << std::endl; 31//////////////////////////////////////////////////////////////////////////////////////////////////// 32 33 34 35 //OpenGL Verison 4.5 Core Profile を選択する 36 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, ver.x); 37 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, ver.y); 38 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 39 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 40 41 42 atexit(glfwTerminate); //プログラム終了時の処理を登録 43 44 return true; 45 } 46 47}
cpp
1#ifndef ___INIT_HPP 2#define ___INIT_HPP 3 4#include "glm/glm.hpp" 5#include <iostream> 6#include "Window.hpp" 7 8namespace FrameWork 9{ 10//////////////////////////////////////////////////////////////////////////////////////////// 11 static std::unique_ptr<Window> windowContext = 0; //ウインドウコンテキスト 12//////////////////////////////////////////////////////////////////////////////////////////// 13 bool Init(glm::ivec2 size, glm::ivec2 ver, const char* title); //初期化 14} 15#endif 16 17
回答1件
あなたの回答
tips
プレビュー