小编sno*_*ain的帖子

PixelBuffer对象和Android上的glReadPixel(ARCore)阻塞

我知道默认的glReadPixels()会等到GL线程上执行所有绘图命令.但是当你绑定一个PixelBuffer对象然后调用glReadPixels()时,它应该是异步的,不会等待任何事情.但是当我绑定PBO并执行glReadPixels()时,它会阻塞一段时间.

以下是我初始化PBO的方法:

mPboIds = IntBuffer.allocate(2); 

GLES30.glGenBuffers(2, mPboIds);

GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, mPboIds.get(0));
GLES30.glBufferData(GLES30.GL_PIXEL_PACK_BUFFER, mPboSize, null, GLES30.GL_STATIC_READ); //allocates only memory space given data size

GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, mPboIds.get(1));
GLES30.glBufferData(GLES30.GL_PIXEL_PACK_BUFFER, mPboSize, null, GLES30.GL_STATIC_READ);

GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)

然后我用两个缓冲区来打乒乓:

    GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, mPboIds.get(mPboIndex)); //1st PBO
    JNIWrapper.glReadPixels(0, 0, mRowStride / mPixelStride, (int)height, GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE); //read pixel from the screen and write to 1st buffer(native C++ code)

    //don't load anything in the first frame
    if (mInitRecord) {
        GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, 0);

        //reverse the index
        mPboIndex = (mPboIndex + 1) % 2;
        mPboNewIndex = (mPboNewIndex + 1) …
Run Code Online (Sandbox Code Playgroud)

android opengl-es arcore

10
推荐指数
1
解决办法
500
查看次数

原子变量c ++

我已将其初始化为

count = 15;
Run Code Online (Sandbox Code Playgroud)

如果我有两个这样的线程:

thread_1(){
    count = 0;
    x = count;
    count = x;
}
Run Code Online (Sandbox Code Playgroud)

thread_2(){
    y = count;
    count = y;
    count = 0;
}
Run Code Online (Sandbox Code Playgroud)

在没有计数同步的情况下,在运行两个线程之后,count可以最终为15.

如果我将我的count变量声明为原子,那么在运行两个线程后,count会一直是0吗?

c++ multithreading

1
推荐指数
1
解决办法
134
查看次数

标签 统计

android ×1

arcore ×1

c++ ×1

multithreading ×1

opengl-es ×1