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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

971閲覧

フレームワーク制作 初期化部を利用側から隠したい。

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/12/22 04:11

編集2021/12/22 04:39

提示コードですが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; } }

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

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

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

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

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

guest

回答2

0

ベストアンサー

ライブラリ利用コードが参照してもよいヘッダと、ライブラリ実装コードだけが参照してもよいヘッダを分けましょう。

たとえば、

  • header/Init.hpp header/Sprite.hpp: ライブラリ利用コードが参照してもいいヘッダ。
  • source/SpritePrivate.hpp: ライブラリ実装コードだけが参照してもよいヘッダ。Sprite_Init()の宣言はこちらに。

投稿2021/12/22 05:05

int32_t

総合スコア20882

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

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

0

C++

1// sprite_2D.hpp 2namespace Framework { 3 void ALL_init(); 4 ... 5};

とし、Sprite__init() はヘッダに書かなきゃいい。

投稿2021/12/22 04:20

episteme

総合スコア16614

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

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

退会済みユーザー

退会済みユーザー

2021/12/22 04:41 編集

質問ですがちょっとやりたい事と違いまして。void ALL_init()はinit.cpp,init.hppにありSprite_Init()は sprite.hpp,sprite.cppにあるのですがその場合どうすればいいのでしょうか?,static クラスを活用するしかないのでしょうか?
episteme

2021/12/22 05:57

実装されたすべてをヘッダに書かねばならんとおもっていますか? 違いますよ?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問