我正在考虑一个问题,即可以在移动设备中使用OpenGL ES进行一些数组计算。例如,我使用glTexImage2D
向着色器传递一个浮点数组(包含0.0和1.0,例如{0.0,1.0,1.0,0.0,0.0 ...}),我想知道有多少通过着色器语言在这个数组中有“1”。最后将结果返回给CPU。这可能吗?我怎么能这样做?
答案 0 :(得分:0)
好吧,你可以试试renderscript(假设你是在Android上)。
如果不可行,你可以尝试这样的事情:
您可以通过将这些数据写入纹理来完成,其中每个纹素都是1或0,具体取决于数据。然后你应该在这个纹理上执行类似mip-mapping的操作,直到你只有1个像素。然后,1个像素将具有所有像素的平均值组合,因此您可以通过将其与初始浮点数组的大小相乘来精确计算它们中有多少是1。例如。如果该1个像素的值为0.25,并且您有400个数据,那么其中100个的值为1.
注意:如果数据不完全适合纹理(例如,您有奇数个数据),请将未使用的纹素填充为0。
注意2:如果数据太多,浮点精度可能会破坏精度...确保使用具有最高精度的单通道纹理格式。单通道32位纹理(你应该瞄准)只能在opengl es 3.0 afaik中使用,但请查看规格。
tldr;你应该制作一个纹理,为它生成mipmap,读取最后一个mip级别,并将它的值乘以数据项的数量