Opengl 导致访问冲突异常的元素

Opengl 导致访问冲突异常的元素,opengl,Opengl,因此,我最近重写了我爱好的OpenGL图形引擎的渲染部分,但我似乎不明白为什么会在GLDreamElement上引发访问冲突异常 从我已经研究过的情况来看,这通常是由于VAO配置不当造成的,但从我所看到的情况来看,一切似乎都很好 下面是我在出错之前调用OpenGL的顺序。不幸的是,我无法记录每个参数的值,但是如果有人注意到顺序中有错误,请告诉我 请注意,我在1080 Nvidia图形卡上运行OpenGL 4.1,并且驱动程序是最新的 glCreateShaderProgramv(GetShade

因此,我最近重写了我爱好的OpenGL图形引擎的渲染部分,但我似乎不明白为什么会在GLDreamElement上引发访问冲突异常

从我已经研究过的情况来看,这通常是由于VAO配置不当造成的,但从我所看到的情况来看,一切似乎都很好

下面是我在出错之前调用OpenGL的顺序。不幸的是,我无法记录每个参数的值,但是如果有人注意到顺序中有错误,请告诉我

请注意,我在1080 Nvidia图形卡上运行OpenGL 4.1,并且驱动程序是最新的

glCreateShaderProgramv(GetShaderType(_desc.ShaderType), 1, &ptr)
glGetProgramiv(_id, GL_INFO_LOG_LENGTH, &logLength)
glGetProgramiv(_id, GL_LINK_STATUS, &linkStatus)
glCreateShaderProgramv(GetShaderType(_desc.ShaderType), 1, &ptr)
glGetProgramiv(_id, GL_INFO_LOG_LENGTH, &logLength)
glGetProgramiv(_id, GL_LINK_STATUS, &linkStatus)
glGenBuffers(1, &_id)
glBindBuffer(target, _id)
glBufferData(target, _desc.ByteCount, 0, GetBufferUsage(_desc.BufferUsage))
glBindBuffer(target, _id)
glMapBufferRange(target, byteOffset, byteCount, access)
glDisable(GL_POLYGON_OFFSET_FILL)
glDisable(GL_POLYGON_OFFSET_POINT)
glDisable(GL_POLYGON_OFFSET_LINE)
glDisable(GL_CULL_FACE)
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
glDisable(GL_SCISSOR_TEST)
glScissor(0, 0, _desc.RenderWidth, _desc.RenderHeight)
glDisable(GL_MULTISAMPLE)
glDisable(GL_DEPTH_CLAMP)
glDisable(GL_LINE_SMOOTH)
glDisable(GL_STENCIL_TEST)
glStencilOpSeparate(GL_FRONT, GetStencilOp(stencilOperationDesc.FailOp), GetStencilOp(stencilOperationDesc.ZFailOp), GetStencilOp(stencilOperationDesc.PassOp))
glStencilOpSeparate(GL_FRONT, GetStencilOp(stencilOperationDesc.FailOp, true), GetStencilOp(stencilOperationDesc.ZFailOp, true), GetStencilOp(stencilOperationDesc.PassOp, true))
glStencilFuncSeparate(GL_FRONT, GetCompareFunc(comparisonFunc), _stencilRefValue, readMask)
glStencilFuncSeparate(GL_BACK, GetCompareFunc(comparisonFunc), _stencilRefValue, readMask)
glStencilMask(writeMask)
glEnable(GL_DEPTH_TEST)
glDepthMask(GL_FALSE)
glDepthFunc(GetCompareFunc(depthFunc))
glGenBuffers(1, &_id)
glBindBuffer(target, _id)
glBufferData(target, _desc.ByteCount, 0, GetBufferUsage(_desc.BufferUsage))
glBindBuffer(target, _id)
glMapBufferRange(target, byteOffset, byteCount, access)
glGenBuffers(1, &_id)
glBindBuffer(target, _id)
glBufferData(target, _desc.ByteCount, 0, GetBufferUsage(_desc.BufferUsage))
glBindBuffer(target, _id)
glMapBufferRange(target, byteOffset, byteCount, access)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glIndexBuffer->GetId())
glGenProgramPipelines(1, &_id)
glUseProgramStages(_id, GL_VERTEX_SHADER_BIT, desc.VertexShaderId)
glUseProgramStages(_id, GL_FRAGMENT_SHADER_BIT, desc.PixelShaderId)
glUseProgramStages(_id, GL_GEOMETRY_SHADER_BIT, desc.GeometryShaderId)
glUseProgramStages(_id, GL_TESS_CONTROL_SHADER_BIT, desc.HullShaderId)
glUseProgramStages(_id, GL_TESS_EVALUATION_SHADER_BIT, desc.DomainShaderId)
glBindProgramPipeline(shaderPipeline->GetId())
glGenVertexArrays(1, &vao)
glBindVertexArray(vao)
glBindBuffer(GL_ARRAY_BUFFER, boundBuffers[inputSlot]->GetId())
glVertexAttribPointer(inputSlot, compSize, compType, GL_FALSE, stride, reinterpret_cast<GLvoid*>(offset))
glEnableVertexAttribArray(inputSlot)
glBindVertexArray(0)
glBindVertexArray(vao->GetId())
glCreateShaderProgramv(GetShaderType(_desc.ShaderType),1和ptr)
glGetProgramiv(_id、GL信息、日志长度和日志长度)
glGetProgramiv(_id、GL链接状态和链接状态)
glCreateShaderProgramv(GetShaderType(_desc.ShaderType),1和ptr)
glGetProgramiv(_id、GL信息、日志长度和日志长度)
glGetProgramiv(_id、GL链接状态和链接状态)
glGenBuffers(1,&_id)
glBindBuffer(目标,\u id)
glBufferData(目标,_desc.ByteCount,0,GetBufferUsage(_desc.BufferUsage))
glBindBuffer(目标,\u id)
glMapBufferRange(目标、字节偏移量、字节计数、访问)
glDisable(GLU多边形偏移填充)
glDisable(GLU多边形偏移点)
glDisable(GLU多边形偏移线)
glDisable(GLU消隐面)
glPolygonMode(GLU前、后、GLU填充)
glDisable(GLU剪刀式测试)
glScissor(0,0,_desc.RenderWidth,_desc.RenderHeight)
glDisable(GLU多样本)
glDisable(GLU深度夹具)
glDisable(GLU线条平滑)
glDisable(GLU模具测试)
glStencilOpSeparate(GL_FRONT,GetStencilOp(stencilOperationDesc.FailOp),GetStencilOp(stencilOperationDesc.ZFailOp),GetStencilOp(stencilOperationDesc.PassOp))
glStencilOpSeparate(GL_FRONT,GetStencilOp(stencilOperationDesc.FailOp,true),GetStencilOp(stencilOperationDesc.ZFailOp,true),GetStencilOp(stencilOperationDesc.PassOp,true))
glStencilFuncSeparate(GL_-FRONT,GetCompareFunc(comparisonFunc),_-stencilRefValue,readMask)
glStencilFuncSeparate(GL_BACK,GetCompareFunc(comparisonFunc),_stencilRefValue,readMask)
glStencilMask(writeMask)
glEnable(GL_深度_测试)
glDepthMask(GLU FALSE)
glDepthFunc(GetCompareFunc(depthFunc))
glGenBuffers(1,&_id)
glBindBuffer(目标,\u id)
glBufferData(目标,_desc.ByteCount,0,GetBufferUsage(_desc.BufferUsage))
glBindBuffer(目标,\u id)
glMapBufferRange(目标、字节偏移量、字节计数、访问)
glGenBuffers(1,&_id)
glBindBuffer(目标,\u id)
glBufferData(目标,_desc.ByteCount,0,GetBufferUsage(_desc.BufferUsage))
glBindBuffer(目标,\u id)
glMapBufferRange(目标、字节偏移量、字节计数、访问)
glBindBuffer(GL\u元素\u数组\u缓冲区,glIndexBuffer->GetId())
glGenProgramPipelines(1,&_id)
glUseProgramStages(\u id,GL\u顶点\u着色器\u位,desc.VertexShaderId)
glUseProgramStages(_id,GL_片段_着色器_BIT,desc.PixelShaderId)
glUseProgramStages(_id,GL_GEOMETRY_SHADER_BIT,desc.GeometryShaderId)
glUseProgramStages(_id,GL_TESS_CONTROL_SHADER_BIT,desc.HullShaderId)
glUseProgramStages(_id,GL_TESS_EVALUATION_SHADER_BIT,desc.DomainShaderId)
glBindProgramPipeline(shaderPipeline->GetId())
glGenVertexArrays(1和vao)
glBindVertexArray(vao)
glBindBuffer(GL_数组_BUFFER,boundBuffers[inputSlot]->GetId())
GLVertexAttribute指针(输入槽、compSize、compType、GLU FALSE、跨步、重新解释转换(偏移))
GlenableVertexAttributeArray(inputSlot)
glBindVertexArray(0)
glBindVertexArray(vao->GetId())

问题是我在创建VBO时传递了无效的大小

将某些nullptr与glBufferData()一起使用看起来非常可疑)是的,当您将nullptr作为数据传递给
glBufferData
时,缓冲区的内容未定义。从您包含的内容来看,似乎您没有更新索引缓冲区,因此索引未定义。看起来并不是所有OpenGL调用都被记录。让我来解决这个问题。但我正在使用glMapBufferRange设置数据。您可以尝试使用ApiTrace并共享跟踪文件。我已更新了调用。我尝试使用ApiTrace,但没有运气造成的错误。