Q&A
提示コードですがcamera->RendererBuffer()部で下記のエラー出ますこれは何が原因なのでしょうか?
現状
Camera->RendererBuffer()をコメントアウトすると普通に動くのですが他のクラスでこの関数を使うとエラーにはなりません。
これは何が影響しているのでしょうか?
glGetError: https://qiita.com/_ydah/items/da56763e94ba58af3d91
0x502: 現在のステートで無効な操作をしている場合、もしくは廃止された関数を呼び出した場合(*1)
利用ライブラリ:
opengl
freetype
glew
glfw
stbi
ソースコード全文: https://github.com/Shigurechan/AAEditor/tree/e0db42df3945fc1e1ea9879e2746ffe5eeedf9f2
Camera
cpp
1 2// ##################################### 初期化 ##################################### 3FrameWork::Camera::Camera() 4{ 5 6 // レンダリングポリゴン 7 glGenVertexArrays(1, &quadVAO); 8 glGenBuffers(1, &quadVBO); 9 10 shader = std::make_shared<FrameWork::Shader>(); 11 12 shader->Load("Asset/shader/FrameBuffer.vert", "Asset/shader/FrameBuffer.frag"); 13 14 shader->setEnable(); 15 glBindVertexArray(quadVAO); 16 glBindBuffer(GL_ARRAY_BUFFER, quadVBO); 17 18 glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(float), &quad, GL_STATIC_DRAW); 19 20 GLuint attrib = shader->getAttribLocation("vertexPosition"); 21 glEnableVertexAttribArray(attrib); 22 glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0); 23 shader->setBindAttribLocation("vertexPosition"); 24 25 attrib = shader->getAttribLocation("vertexUV"); 26 glEnableVertexAttribArray(attrib); 27 glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float))); 28 shader->setBindAttribLocation("vertexUV"); 29 30 shader->setDisable(); 31 glBindVertexArray(0); 32 glBindBuffer(GL_ARRAY_BUFFER, 0); 33 34 35 36 //MSAA バッファ 37 glGenFramebuffers(1, &frameBufferFBO); 38 glBindFramebuffer(GL_FRAMEBUFFER, frameBufferFBO); 39 glGenTextures(1, &frameBuffer); 40 glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, frameBuffer); 41 glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 8, GL_RGB, windowContext->getSize().x, windowContext->getSize().y, GL_TRUE); 42 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, frameBuffer, 0); 43 44 45 //レンダリングバッファ 46 glGenRenderbuffers(1, &rbo); 47 glBindRenderbuffer(GL_RENDERBUFFER, rbo); 48 glRenderbufferStorageMultisample(GL_RENDERBUFFER, 8, GL_DEPTH24_STENCIL8, windowContext->getSize().x, windowContext->getSize().y); 49 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo); 50 51 //MSAA アタッチ 52 GLuint attachment = GL_COLOR_ATTACHMENT0; 53 glDrawBuffers(1,&attachment); 54 55 56 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) 57 { 58 std::cerr << "Framebuffer is not complete: 0x" << glCheckFramebufferStatus(GL_FRAMEBUFFER) << std::endl; 59 assert(0); 60 } 61 glBindFramebuffer(GL_FRAMEBUFFER,0); 62 63 64 //深度マップ 65 glGenFramebuffers(1, &depthMapFBO); 66 glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); 67 glGenTextures(1, &depthMap); 68 glBindTexture(GL_TEXTURE_2D, depthMap); 69 glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, windowContext->getSize().x, windowContext->getSize().y, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); 70 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 71 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 72 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 73 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 74 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthMap, 0); 75 76 //カラーバッファ 77 glGenFramebuffers(1, &colorBufferFBO); 78 glBindFramebuffer(GL_FRAMEBUFFER, colorBufferFBO); 79 glGenTextures(1, &colorBuffer); 80 glBindTexture(GL_TEXTURE_2D, colorBuffer); 81 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, windowContext->getSize().x, windowContext->getSize().y, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); 82 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 83 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 84 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorBuffer, 0); // we only need a color buffer 85 86 87 88 89 position = glm::vec3(0,0,0.5); //座標 90 vecLook = glm::vec3(0,0,-1); //向き 91 92 setPosition(position); 93 setLook(vecLook); 94 95} 96 97 98// ##################################### スカイボックスを設定 ##################################### 99void FrameWork::Camera::setSkyBox(GLuint tex) 100{ 101 102} 103 104 105// ##################################### 描画 ##################################### 106void FrameWork::Camera::View(std::shared_ptr<Actor> actor) 107{ 108 109 glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); 110 glViewport(0, 0, windowContext->getSize().x, windowContext->getSize().y); 111 112 //actor->Renderer_Depth(getViewPerspective()); 113 114 glBindFramebuffer(GL_FRAMEBUFFER, frameBufferFBO); 115 glViewport(0, 0, windowContext->getSize().x, windowContext->getSize().y); 116 117 glEnable(GL_DEPTH_TEST); 118// actor->Renderer(getViewPerspective()); 119 120 glDepthFunc(GL_LEQUAL); 121 122 actor->Renderer(getViewOrthographic()); 123 124 125// actor->Renderer(getViewPerspective()); 126 glDepthFunc(GL_LESS); 127 128 glBindFramebuffer(GL_FRAMEBUFFER,0); 129} 130 131// ##################################### フレームバッファ クリア ##################################### 132void FrameWork::Camera::ClearBuffer() 133{ 134 glEnable(GL_DEPTH_TEST); 135 glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 136 glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); 137 glClear(GL_DEPTH_BUFFER_BIT); 138 glBindFramebuffer(GL_FRAMEBUFFER, frameBufferFBO); 139 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 140 //glBindFramebuffer(GL_FRAMEBUFFER, 0); 141} 142 143// ##################################### フレームバッファ 描画 ##################################### 144void FrameWork::Camera::RendererBuffer() 145{ 146 147 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 148 149 glBindVertexArray(quadVAO); 150 glBindBuffer(GL_ARRAY_BUFFER, quadVBO); 151 shader->setEnable(); 152 153 glBindFramebuffer(GL_READ_FRAMEBUFFER, frameBuffer); 154 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, colorBufferFBO); 155 glBlitFramebuffer(0, 0, windowContext->getSize().x, windowContext->getSize().y, 0, 0, windowContext->getSize().x, windowContext->getSize().y, GL_COLOR_BUFFER_BIT, GL_NEAREST); 156 157 158 glBindFramebuffer(GL_FRAMEBUFFER, 0); 159 shader->setUniformSampler2D("screenTexture", 0,colorBufferFBO); 160 glDrawArrays(GL_TRIANGLES,0,6); 161 162 shader->setDisable(); 163 glBindVertexArray(0); 164 glBindBuffer(GL_ARRAY_BUFFER, 0); 165 166} 167
Title.hpp
#include "Title.hpp" #include <FrameWork.hpp> #include "Title_Menu.hpp" Title::Title() : Scene(Scene::SceneType::Title) { title = std::make_shared<Title_Menu>(); camera = std::make_unique<FrameWork::Camera>(); } void Title::Update() { //title->Update(); } void Title::Renderer() { camera->ClearBuffer(); camera->View(title); camera->RendererBuffer(); } void Title::Loop() { Update(); Renderer(); }
Title_menu
cpp
1#include "Title_Menu.hpp" 2#include "Layer.hpp" 3 4#include <FrameWork.hpp> 5 6Title_Menu::Title_Menu() : Actor() 7{ 8 renderer = std::make_shared<FrameWork::Text>(); 9 layer = std::make_shared<Layer>(glm::ivec2(18,32),25); 10 11 //layer->setCharacter(glm::ivec2(0,0),'A'); 12 13} 14 15 16 17void Title_Menu::Update() 18{ 19 20 21 22 23 24 25 26 27} 28 29void Title_Menu::Renderer(const glm::mat4 view)const 30{ 31 /* 32 for (int y = 0; y < layer->getSize().y; y++) 33 { 34 for (int x = 0; x < layer->getSize().x; x++) 35 { 36 renderer->Renderer(view,glm::ivec2(x * 25, y * 25),layer->getCharacter(glm::ivec2(x,y)).getTexture()); 37 } 38 } 39 40 */ 41} 42
Layer
cpp
1#include "Layer.hpp" 2#include <FrameWork.hpp> 3 4Layer::Layer(glm::ivec2 s,int ps) 5{ 6 position = glm::ivec2(0,ps); //座標 7 pixelSize = ps; //ピクセルサイズ 8 size = glm::vec2(0,0); //サイズ 9 10 11 character.resize(0); 12 13 Resize(s); //リサイズ 14} 15 16 17void Layer::setCharacter(glm::ivec2 pos, const char ch) 18{ 19 character.at(pos.y).at(pos.x).setCharacter(ch); 20} 21 22void Layer::Resize(glm::ivec2 s) 23{ 24 if ((s.x > size.x) && (s.y > size.y)) 25 { 26 for (int y = 0; y < s.y - size.y; y++) 27 { 28 std::vector<Character> ch; 29 for (int x = 0; x < s.x - size.x; x++) 30 { 31 ch.push_back(Character(glm::ivec2(size.x + x, size.y + y),pixelSize)); 32 } 33 character.push_back(ch); 34 } 35 36 for (int y = size.y; y < s.y; y++) 37 { 38 for (int x = size.x; x < s.x; x++) 39 { 40 character.at(y).at(x).setCharacter(' '); 41 } 42 } 43 } 44 45 46 47 size = s; 48} 49 50void Layer::setPixelSize(int s) 51{ 52 for (int y = 0; y < size.y; y++) 53 { 54 for (int x = 0; x < size.x; x++) 55 { 56 character.at(y).at(x).Resize(s); 57 } 58 } 59} 60 61Character Layer::getCharacter(glm::ivec2 pos) 62{ 63 return character.at(pos.y).at(pos.x); 64} 65 66glm::ivec2 Layer::getSize() 67{ 68 return size; 69} 70 71 72void Layer::Update() 73{ 74 75} 76
Chracter
cpp
1#include "Character.hpp" 2 3Character::Character(glm::vec2 pos,int pixel) 4{ 5 position = pos; 6 character = '\0'; 7 pixelSize = pixel; 8} 9 10void Character::setCharacter(const char ch) 11{ 12 character = ch; 13 DeleteCharacterTexture(texture); 14 texture = FrameWork::GenCharacterTexture("Asset/font/PressStart2P.ttf", pixelSize, FrameWork::GetRGBAColor(glm::vec4(0, 255, 0, 255)), "%c",ch); 15} 16 17void Character::Resize(int pixel) 18{ 19 pixelSize = pixel; 20 DeleteCharacterTexture(texture); 21 texture = FrameWork::GenCharacterTexture("Asset/font/PressStart2P.ttf", pixelSize, FrameWork::GetRGBAColor(glm::vec4(0, 255, 0, 255)), "%c", character); 22} 23 24 25 26glm::ivec2 Character::getPosition() 27{ 28 return position; 29} 30 31FrameWork::CharacterTexture* Character::getTexture() 32{ 33 return &texture; 34} 35 36void Character::Update() 37{ 38 39} 40 41void Character::Renderer(const glm::ivec2 pos,const glm::mat4 view)const 42{ 43 switch(character) 44 { 45 46 case 0x28: // ( 47 { 48 49 } 50 break; 51 52 case 0x29: // ) 53 { 54 55 } 56 break; 57 58 59 default: 60 { 61 62 } 63 break; 64 65 } 66}
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
退会済みユーザー
2022/01/31 07:00 編集
2022/01/31 07:04
退会済みユーザー
2022/01/31 07:17 編集
2022/01/31 07:18
退会済みユーザー
2022/01/31 07:31 編集
2022/01/31 07:35