繁体   English   中英

调用 glGenBuffers() 时访问冲突

[英]Access Violation in calling glGenBuffers()

我正在尝试开发游戏引擎并添加批处理渲染功能。 我这里有2个问题,

  1. 有一些不寻常的访问冲突错误

    我将 Buffer 类初始化为 Renderer class 的成员变量

    Scope<VertexBuffer> vertex = CreateScope<OpenGLVertexBuffer>(ME_MAX_VERTEX_BUFFER_SIZE, GL_DYNAMIC_DRAW); Scope<IndexBuffer> index = CreateScope<OpenGLIndexBuffer>(ME_MAX_INDEX_BUFFER_SIZE, GL_DYNAMIC_DRAW);

    上面的Scope指的是unique_ptrCreateScope指的是make_unique
    代码文件:
    Header: https://github.com/VikramSGIT/MarsEngine/blob/master/MarsEngine/src/RenderAPI/OpenGL/OpenGLRenderer.cpp
    CPP: https://github.com/VikramSGIT/MarsEngine/blob/master/MarsEngine/src/RenderAPI/OpenGL/OpenGLRenderer.cpp
    Vertex Buffer类的构造函数(Index Buffer Class 有类似的构造函数)

     OpenGLVertexBuffer::OpenGLVertexBuffer(const unsigned int& size, const unsigned int& mode):Emptybuffer(true) { ME_PROFILE_TRACE_CALL(); GLLogCall(glGenBuffers(1, &m_RendererID)); GLLogCall(glBindBuffer(GL_ARRAY_BUFFER, m_RendererID)); GLLogCall(glBufferData(GL_ARRAY_BUFFER, size, nullptr, mode)); }

    恰好在glGenBuffers(1,&m_RendererID)访问冲突。 甚至双重检查我在glfwMakeCurrentContext(window) glewInit()

  2. 当我尝试在上面的 OpenGLVertexBuffer class 构造函数中添加glewInit()时。 还有一个不寻常的问题, glDeleteBuffers(1, &m_RendererID)卡住了!

     OpenGLVertexBuffer::~OpenGLVertexBuffer() { ME_PROFILE_TRACE_CALL(); GLLogCall(glDeleteBuffers(1, &m_RendererID)); }

    然后我在 VS Code 中运行了相同的 model 代码,运行流畅。 因此,得出的结论是我没有驱动程序问题。

    需要注意的是,我的屏幕上没有 output (不包括在内,因为我不确定逻辑),ImGui 运行顺利。 但是我在逻辑的每个部分都运行了断点,缓冲区按预期填满,ba 可能会喜欢 waz goin wroonng:(

链接到我的 Github 存储库: https://github.com/VikramSGIT/MarsEngine

template<typename T>
using Ref = std::shared_ptr<T>;

template<typename T>
using Scope = std::shared_ptr<T>;

template<typename T, typename... Args>
Ref<T> CreateRef(Args&& ... args) { return std::make_shared<T>(std::forward<Args (args)...); }

template<typename T, typename ... Args>
Scope<T> CreateScope(Args&& ...args) { return std::make_unique<T>(std::forward<Args> (args)...); }

您的CreateScope function 创建一个unique_ptr ,但您的Scope object 存储一个shared_ptr 我怀疑问题是这样的:

template<typename T>
using Scope = std::shared_ptr<T>;

应该是:

template<typename T>
using Scope = std::unique_ptr<T>;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM