我的程序每次到达render(Mesh* mesh)
函数时都会崩溃,如果我只有std::cout
,它会正常工作,但是当我尝试访问{{1}中的指针时却没有}类。我已经将RenderingEngine
放在相机和窗口的析构函数中并且它们没有被调用,并且只有在构造cout
之后才调用渲染函数,所以我不确定为什么它不会让我访问指针
它给我的错误是:
GameCreatorEngine.exe中0x0101F722处的未处理异常:0xC0000005:访问冲突读取位置0x00000000。
RenderingEngine
-
#include "RenderingEngine.h"
#include "ShaderManager.h"
#include "Camera.h"
#include "Mesh.h"
#include <iostream>
using namespace std;
RenderingEngine::RenderingEngine(WindowEngine* window)
{
this->window = window;
main_camera = new Camera(window->getWidth() / window->getHeight(), 100.0f, 0.1f, 1000.0f);
shaders = new ShaderManager();
bound_program = shaders->getProgram(shaders->DEFAULT);
window->setCursorVisability(false);
cout << "renderer created" << endl;
}
RenderingEngine::~RenderingEngine()
{
delete main_camera;
delete shaders;
delete window;
cout << "renderer deleted" << endl;
}
void RenderingEngine::setCamera(Camera* camera)
{
main_camera = camera;
}
ShaderProgram* RenderingEngine::getBoundProgram()
{
return bound_program;
}
void RenderingEngine::render(Mesh* mesh)
{
if (main_camera == nullptr) // crashes
{
cout << "weeeeeeeeeeeeeyl" << endl;
}
main_camera->print(); // crashes
window->clearScreen(); // crashes
window->swapBuffer(); // crashes
cout << "WHY IS THIS WORKING" << endl; // works
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // WORKS
}
void RenderingEngine::render(ShaderProgram* program, Mesh* mesh)
{
window->clearScreen();
{
glUseProgram(program->getProgramID());
glBindVertexArray(*mesh->getVAO_ID());
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
{
main_camera->update(window);
program->addUniform4m("mvp", main_camera->getModelViewProjection(main_camera->getTransformationMatrix()));
glDrawElements(GL_TRIANGLES, *mesh->getIndicesCount(), GL_UNSIGNED_INT, 0);
}
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
glBindVertexArray(0);
glUseProgram(0);
}
window->swapBuffer();
}
答案 0 :(得分:2)
如果它在if (main_camera == nullptr) // crashes
上崩溃,那么因为“this”为空。
答案 1 :(得分:1)
看起来你的RenderingEngine指针是nullptr
答案 2 :(得分:0)
看起来我想念这个 - &gt;出
void GameObject::setRenderingEngine(RenderingEngine* renderer)
{
renderer = renderer; // assigning to self
}