【发布时间】:2018-03-19 17:04:35
【问题描述】:
我正在将图像数据上传到 GL 纹理asynchronously。
在调试输出中,我在渲染过程中收到以下警告:
来源:OpenGL,类型:Other,id:131185,严重性:Notification
消息:缓冲区详细信息:缓冲区对象 1(绑定到 GL_PIXEL_UNPACK_BUFFER_ARB,使用提示为 GL_DYNAMIC_DRAW) 已 在系统堆内存中映射 WRITE_ONLY(快速)。来源:OpenGL,类型: 性能,id:131154,严重性:中等消息:像素路径 性能警告:像素传输与 3D 渲染同步。
在我的案例中,我看不到 PBO 的任何错误用法或任何错误。所以问题是,这些警告是否可以安全丢弃,或者我实际上做错了。
我的那部分代码:
//start copuying pixels into PBO from RAM:
mPBOs[mCurrentPBO].Bind(GL_PIXEL_UNPACK_BUFFER);
const uint32_t buffSize = pipe->GetBufferSize();
GLubyte* ptr = (GLubyte*)mPBOs[mCurrentPBO].MapRange(0, buffSize, GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
if (ptr)
{
memcpy(ptr, pipe->GetBuffer(), buffSize);
mPBOs[mCurrentPBO].Unmap();
}
//copy pixels from another already full PBO(except of first frame into texture //
mPBOs[1 - mCurrentPBO].Bind(GL_PIXEL_UNPACK_BUFFER);
//mCopyTex is bound to mCopyFBO as attachment
glTextureSubImage2D(mCopyTex->GetHandle(), 0, 0, 0, mClientSize.x, mClientSize.y,
GL_RGBA, GL_UNSIGNED_BYTE, 0);
mCurrentPBO = 1 - mCurrentPBO;
然后我只是将结果 blit 到默认帧缓冲区。不渲染几何图形或类似的东西。
glBlitNamedFramebuffer(
mCopyFBO,
0,//default FBO id
0,
0,
mViewportSize.x,
mViewportSize.y,
0,
0,
mViewportSize.x,
mViewportSize.y,
GL_COLOR_BUFFER_BIT,
GL_LINEAR);
在 NVIDIA GTX 960 卡上运行。
【问题讨论】:
-
“问题更接近”先生,请赐教我的问题有什么问题?