gpt4 book ai didi

c++ - 异步 glTexSubImage2D 和 OGL 线程阻塞

转载 作者:行者123 更新时间:2023-11-30 02:08:24 25 4
gpt4 key购买 nike

我正在开发一个 GPGPU 应用程序,该应用程序使用 PBO 在 cpu 和 gpu 之间传输数据。我的应用程序中的一项要求是 OpenGL 渲染线程应尽可能少地阻塞,并且处理应具有尽可能低的延迟。

我的问题是我是否必须在调用 glTexSubImage2D(启动从主机到设备的转换)和实际使用/渲染纹理之间添加延迟?对于具有例如纹理的纹理,这种延迟应该有多大?尺寸 1024x1024?

for(auto texture: textures)
{
glBindTexture(GL_TEXTURE_2D, texture.id());
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, ...);
glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB, ..., NULL, GL_STREAM_DRAW);
void* mem = glMapBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, GL_WRITE_ONLY);
copy(mem, data);
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER_ARB);
glTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, ..., NULL);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
glBindTexture(GL_TEXTURE_2D, 0);
}

do_other_cpu_stuff_while_data_is_transferring(); // Is this needed to avoid blocking calls while rendering? If so, what strategy can I use to estimate the minimum amount of time needed to transfer the data.

for(auto texture: textures)
{
render(texture);
}

最佳答案

我会说最长的延迟将发生在对 copy() 和/或 glUnmapBuffer() 的调用中,但这将取决于很多因素(主要是您的硬件),因此您最好的选择是在程序的开始并测量它们。对于计时,您应该使用带有高分辨率计时器(例如 QuerPerformanceCounter)的 glFinish() 函数。

关于c++ - 异步 glTexSubImage2D 和 OGL 线程阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com