我正在将图像数据上传到 GL 纹理中异步地 http://on-demand.gputechconf.com/gtc/2012/presentations/S0356-GTC2012-Texture-Transfers.pdf.
在调试输出中,我在渲染过程中收到以下警告:
来源:OpenGL,类型:其他,id:131185,严重性:通知
消息:缓冲区详细信息:缓冲区对象 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;
然后我只是将结果传输到默认帧缓冲区。没有几何图形或类似的渲染。
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 卡上运行。