提示コードですがvoid Sprite_Init();
関数を利用側から隠して初期化するvoid ALL_Init()
関数なるものだけを利用側に公開するにはどうしたらいいのでしょうか?void ALL_Init()
でvoid Sprite_Init();
を使い利用側からは使えないようにしたいです。
状態
sprite.hpp sprite.cppにSprite_Init()がありこれをbool Init()関数から呼び出して使いかつsprite.hppをインクルードしてもSprite_initは参照できないようにしたいです。
extern は利用側から使えてしまうためやりたい事とは違います。
static はそのソースファイルのみなので違います。
参考サイト: https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96
#ifndef ___SPRITE_2D_HPP_ #define ___SPRITE_2D_HPP_ #include <iostream> #include <fstream> #include <GL/glew.h> #include <glm/glm.hpp> #include "glm/glm.hpp" #include <glm/gtc/matrix_transform.hpp> #include <glm/gtx/transform.hpp> #include "Render.hpp" #include "VertexData.hpp" #include "Resource.hpp" /*######################################################################### # スプライトクラス 説明 2Dのテクスチャ描画 正射形 ###########################################################################*/ /*######################################################################### *NOTE * * 頂点の順番 * 0 2,3 * 1,4 5 ###########################################################################*/ namespace FrameWork { //static std::array<FrameWork::VertexAttribute,6> vertex; //頂点 void Sprite_Init(); void DrawSprite(const glm::vec2, const Texture texture); void DrawSprite_Rotate(const glm::vec2, const float r, const Texture texture); void DrawSprite_Size(const glm::vec2, const glm::vec2 start, const glm::vec2 end, const Texture texture); void DrawSprite_Size_Rotate(const glm::vec2, const glm::vec2 start, const glm::vec2 end, const float r, const Texture texture); static void setSize(const glm::vec2 startSize, const glm::vec2 endSize); } #endif
#include "../header/Sprite.hpp" #include <array> #include <memory> #include <glm/glm.hpp> #include <glm/gtc/type_ptr.hpp> #include <glm/gtc/quaternion.hpp> #include <glm/gtc/type_ptr.hpp> #include "../header/VertexData.hpp" #include "../header/Shader.hpp" #include "../header/VertexData.hpp" #include "../header/Sprite.hpp" #include <GL/glew.h> /* attrib = shaderTexture.getAttribLocation("vertexNormal"); glEnableVertexAttribArray(attrib); glBufferData(GL_ARRAY_BUFFER, vertex->size() * sizeof(VertexAttribute), vertex->data(), GL_DYNAMIC_DRAW); glVertexAttribPointer(attrib, 4, GL_FLOAT, GL_FALSE, 12 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 5)); */ //頂点 static std::array<FrameWork::VertexAttribute, 6> vertex = { FrameWork::VertexAttribute{glm::vec3(0,0,0),glm::vec2(0,0),glm::vec3(0,0,0)}, FrameWork::VertexAttribute{glm::vec3(0,0,0),glm::vec2(0,0),glm::vec3(0,0,0)}, FrameWork::VertexAttribute{glm::vec3(0,0,0),glm::vec2(0,0),glm::vec3(0,0,0)}, FrameWork::VertexAttribute{glm::vec3(0,0,0),glm::vec2(0,0),glm::vec3(0,0,0)}, FrameWork::VertexAttribute{glm::vec3(0,0,0),glm::vec2(0,0),glm::vec3(0,0,0)}, FrameWork::VertexAttribute{glm::vec3(0,0,0),glm::vec2(0,0),glm::vec3(0,0,0)} }; static GLuint vao; static GLuint vbo; void FrameWork::Sprite_Init() { glGenVertexArrays(1, &vao); glGenBuffers(1, &vbo); glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); } void FrameWork::DrawSprite(const glm::vec2, const Texture texture) { setSize(glm::vec2(0,0),texture.size); } void FrameWork::DrawSprite_Rotate(const glm::vec2, const float r, const Texture texture) { } void FrameWork::DrawSprite_Size(const glm::vec2, const glm::vec2 start, const glm::vec2 end, const Texture texture) { } void FrameWork::DrawSprite_Size_Rotate(const glm::vec2, const glm::vec2 start, const glm::vec2 end, const float r, const Texture texture) { }
#include "../header/Init.hpp" #include <GL/glew.h> #include <GLFW/glfw3.h> #include "../header/Window.hpp" #include "../header/Resource.hpp" #include "../header/Sprite.hpp" namespace FrameWork { std::shared_ptr<FrameWork::Window> windowContext = 0; // ##################################### 初期化 ##################################### bool Init(glm::ivec2 size, glm::ivec2 ver, const char *title) { glewInit(); if (FT_Init_FreeType(&ft) != 0) { std::cerr <<"FreeType を初期化出来ません。"<< std::endl; assert(0); } setlocale(LC_CTYPE, ""); //ローカルを設定 if (glfwInit() == GL_FALSE) { std::cerr << "glfw初期化失敗。" << std::endl; return false; } //マウス移動 if (GLFW_NOT_INITIALIZED == glfwRawMouseMotionSupported()) { std::cerr << "GLFW_NOT_INITIALIZED" << std::endl; } windowContext = std::make_shared<Window>(size, title); //ウインドウコンテキストを生成 //glfwWindowHint(GLFW_SAMPLES, 64); // OpenGL Verison 4.5 Core Profile を選択する glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, ver.x); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, ver.y); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glEnable(GL_TEXTURE_2D); //テクスチャを有効 glEnable(GL_ALPHA_TEST); //アルファテスト glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //ブレンドタイプ glEnable(GL_BLEND); //ブレンド有効 glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE); //半透明 glEnable(GL_CULL_FACE); //カリングを有効 glCullFace(GL_BACK); //裏面を無効 atexit(glfwTerminate); //プログラム終了時の処理を登録 //FrameWork::Sprite_Init(); return true; } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。