【发布时间】:2014-08-19 16:32:32
【问题描述】:
我的程序每次到达render(Mesh* mesh) 函数时都会崩溃,如果我只有一个std::cout,它可以正常工作,但当我尝试访问RenderingEngine 类中的指针时不会。我已经将couts 放在相机和窗口的析构函数中并且它们没有被调用,并且渲染函数仅在 RenderingEngine 被构造之后才被调用,所以我不确定为什么它不会让我访问指针
它给我的错误是:
GameCreatorEngine.exe 中 0x0101F722 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000000。
#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();
}
-
#pragma once
#include <glew.h>
#include "GameObject.h"
class Mesh;
class Camera;
class ShaderManager;
class ShaderProgram;
class WindowEngine;
class RenderingEngine
{
public:
RenderingEngine(WindowEngine* window);
~RenderingEngine();
void setCamera(Camera* cam);
ShaderProgram* getBoundProgram();
void render(Mesh* mesh);
void render(ShaderProgram* program, Mesh* mesh);
private:
Camera* main_camera;
WindowEngine* window;
ShaderManager* shaders;
ShaderProgram* bound_program;
};
【问题讨论】:
-
可能是因为您要删除
window,而您并不拥有它。此外,如果您复制或分配RenderingEngine,所有内容都会崩溃。想想当你复制或赋值时指针会发生什么。 -
我在窗口析构函数中添加了一个 cout 并且它没有被调用
-
您没有展示任何实际运行可能崩溃的代码,更不用说打印到标准输出了。
标签: c++ opengl visual-c++ c++11 crash