提示コードですが以下のメイクファイルを実行すると下記のコンソールのエラーが表示されるのですがこれは何が原因なのでしょうか?
デバッガで調べましたが見て通りSprite.cpp 29行目が悪いみたいななのですが原因わかりません。///
コメント部参照
試したこと
Main.cppのEntryクラスや初期化関係の関数をコメントアウトして実験
参考サイト: https://www.toumasu-program.net/entry/2019/05/24/112315/
makefile
makefile
1PRG :=Game 2SRC_DIR :=FrameWork/source 3SRC_USE_DIR :=source 4 5OBJ_DIR :=FrameWork/object 6OBJ_USE_DIR :=object 7 8DEP_DIR :=FrameWork/object 9DEP :=$(wildcard $(DEP_DIR)/*.d) 10 11SRC :=$(wildcard $(SRC_DIR)/*.cpp) 12SRC_USE :=$(wildcard $(SRC_USE_DIR)/*.cpp) 13 14OBJ :=$(addprefix $(OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC)))) 15OBJ_USE :=$(addprefix $(OBJ_USE_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC_USE)))) 16 17$(PRG): $(OBJ) $(OBJ_USE) 18 $(CXX) $^ -o $@ -ldl -lGLESv2 -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -ldl -lX11 19 20$(OBJ_DIR)/%.o: FrameWork/source/%.cpp 21 $(CXX) -g -c -MMD -MP $< -o $@ 22-include $(DEP) 23 24$(OBJ_USE_DIR)/%.o: source/%.cpp 25 $(CXX) -g -c -MMD -MP $< -o $@ 26-include $(DEP) 27 28clean: 29 rm -f ./$(OBJ_USE_DIR)/*.o ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d ./$(OBJ_USE_DIR)/*.d $(PRG) 30
Console debug
Reading symbols from ./Game... (gdb) run Starting program: /home/shigurechan/prg/TopDownGame/Game [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb) bt #0 0x0000000000000000 in ?? () #1 0x0000555555563ff3 in FrameWork::Sprite::Sprite (this=0x55555563f9c0) at FrameWork/source/Sprite.cpp:29
Main.cpp
#include <iostream> #include "../FrameWork/FrameWork/FrameWork.hpp" #include "../header/Entry.hpp" int main() { if (glfwInit() == GL_FALSE) { std::cerr << "glfw を初期化出来ません。" << std::endl; assert(0); } int screenSize = 50; std::shared_ptr<FrameWork::Window> window = FrameWork::GenWindowContext(glm::ivec2(16 * screenSize, 9 * screenSize), "Game"); FrameWork::setCurrentContext(window); if (glewInit() != GLEW_OK) { std::cerr << "glew を初期化出来ません。" << std::endl; assert(0); } FrameWork::Init_FrameWork(); std::unique_ptr<Entry> entry = std::make_unique<Entry>(); while (*window) { entry->Loop(); window->SwapBuffers(); } return 0; }
Console
$ ./Game Segmentation fault (コアダンプ)
Srpite.cpp
cpp
1#include "../header/Sprite.hpp" 2 3#include <array> 4#include <memory> 5 6#include <GL/glew.h> 7#include <glm/glm.hpp> 8#include <glm/gtc/type_ptr.hpp> 9#include <glm/gtc/quaternion.hpp> 10#include <glm/gtc/type_ptr.hpp> 11#include <glm/gtx/transform.hpp> 12#include <glm/gtc/matrix_transform.hpp> 13 14#include "../header/Resource.hpp" 15#include "../header/Shader.hpp" 16#include "../header/Vertex.hpp" 17#include "../header/Sprite.hpp" 18#include "../header/Shader.hpp" 19#include "../header/Window.hpp" 20#include "../header/Init.hpp" 21 22 23 24FrameWork::Sprite::Sprite() : Render() 25{ 26 vao = 0; 27 vbo = 0; 28////////////////////////////////////////////////////////////////// 29 glGenVertexArrays(1, &vao); 30//////////////////////////////////////////////////////////////// 31 glGenBuffers(1, &vbo); 32 33 34 35 glBindVertexArray(vao); 36 glBindBuffer(GL_ARRAY_BUFFER, vbo); 37 38 shader->setEnable(); 39 40 glBufferData(GL_ARRAY_BUFFER, vertex.size() * sizeof(VertexAttributeSprite), (float*)vertex.data(), GL_DYNAMIC_DRAW); 41 42 GLuint attrib = shader->getAttribLocation("vertexPosition"); 43 glEnableVertexAttribArray(attrib); 44 glVertexAttribPointer(attrib, 3, GL_FLOAT, GL_FALSE, (sizeof(VertexAttributeSprite) / sizeof(float)) * sizeof(float), (GLvoid*)(sizeof(GLfloat) * 0)); 45 shader->setBindAttribLocation("vertexPosition"); 46 47 attrib = shader->getAttribLocation("vertexUV"); 48 glEnableVertexAttribArray(attrib); 49 glVertexAttribPointer(attrib, 3, GL_FLOAT, GL_FALSE, (sizeof(VertexAttributeSprite) / sizeof(float)) * sizeof(float), (GLvoid*)(sizeof(GLfloat) * 3)); 50 shader->setBindAttribLocation("vertexUV"); 51 52 shader->setDisable(); 53 glBindVertexArray(0); 54 glBindBuffer(GL_ARRAY_BUFFER, 0); 55 56} 57 58// ##################################### 描画 ##################################### 59void FrameWork::Sprite::Renderer(const glm::mat4 view,const FrameWork::Texture texture,const glm::vec3 position,const glm::ivec2 startSize,const glm::ivec2 endSize) 60{ 61 setSize(startSize,endSize); 62 setUV(startSize, endSize,texture.size); 63 64 glBindVertexArray(vao); 65 glBindBuffer(GL_ARRAY_BUFFER, vbo); 66 glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(VertexAttributeSprite) * vertex.size(), vertex.data()); 67 68 Transform::setPosition(position); 69 Transform::setRotate(glm::vec3(0, 0, 1), 0); 70 Transform::setScale(glm::vec3(endSize - startSize,1)); 71 72 shader->setUniformSampler2D("uImage",0,texture.ID); 73 shader->setUniformMatrix4fv("uTranslate", Transform::getMatTranslation()); 74 shader->setUniformMatrix4fv("uRotate", Transform::getMatRotate()); 75 shader->setUniformMatrix4fv("uScale", Transform::getMatScale()); 76 shader->setUniformMatrix4fv("uViewProjection", view); 77 78 glDrawArrays(GL_TRIANGLES,0,6); 79 80 glBindVertexArray(0); 81 glBindBuffer(GL_ARRAY_BUFFER, 0); 82} 83 84
Sprite.hpp
cpp
1# 2 3/*######################################################################### 4# スプライトクラス 5説明 6 2Dのテクスチャ描画 正射形 7###########################################################################*/ 8 9/*######################################################################### 10*NOTE 11* 12* 頂点の順番 13* 0 2,3 14* 1,4 5 15###########################################################################*/ 16 17 18namespace FrameWork 19{ 20 21 22 class Sprite : public Render 23 { 24 public: 25 26 Sprite(); 27 ~Sprite(); 28 29 void Renderer(const glm::mat4 view, const FrameWork::Texture texture,const glm::vec3 position, const glm::ivec2 startSize, const glm::ivec2 endSize); 30 void Renderer_Rotate(const glm::mat4 view, const glm::vec3 position, const glm::ivec2 startSize, const glm::ivec2 endSize,const glm::ivec2 textureSize, const glm::vec3 rotate, const float radian); 31 32 std::shared_ptr<FrameWork::Shader> shader; 33 34 private: 35 36 GLuint vao; 37 GLuint vbo; 38 39 std::array<VertexAttribute, 6> vertex; 40 41 void setSize(const glm::vec2 startSize, const glm::vec2 endSize); 42 void setUV(const glm::vec2 startSize, const glm::vec2 endSize, const glm::ivec2 textureSize); 43 44 45 }; 46} 47#endif
回答1件
あなたの回答
tips
プレビュー