i'm thinking a problem that is it possible to do some arrays calcution using OpenGL ES in mobile devices. For example, i used glTexImage2D to pass shader a float array (which contains some 0.0 and 1.0, such as {0.0, 1.0, 1.0, 0.0, 0.0...}), and i wish to figure out how many "1" are there in this array through Shader Language. Finally return the result to CPU. Is this possible? And how can i do this?
How to do calculation using OpenGL ES 2.0/3.0?
681 Views Asked by KiBa1215 At
1
There are 1 best solutions below
Related Questions in OPENGL-ES
- How can I use ARCore and OpenGL without Sceneform for making ar measurement app android?
- Unable to find GL_INT_2_10_10_10_REV define on Android GLES
- How to rotate model and view matrix with same angle?
- CameraX custom OpenGL Video Pipeline (`UseCase`/`VideoOutput`)
- How do I avoid leaking Graphics memory in OpenGL ES 2.0 in a background thread on Android?
- How to Create GPU SkImage in a Background Thread and Draw it on a Main SkSurface with OpenGL and Skia?
- glTexSubImage2D throws GL_INVALID_OPERATION in OpenGL ES 3.2 on Android NDK with FreeType
- What are the rules for the precision of casting operations in GLSL
- Why would a OpenGL ES 2.0 leak graphics memory on Android, but not iOS with the same code
- Create a VideoFrame from Canvas
- GLES30 Ray Picking gluUnProject
- OpenGL lighting works incorrectly on Android and WebAssembly
- WebGL: this extension has very low support on mobile devices
- OpenGL ES 3.0 - Textures black
- OpenGL-glGetUniformLocation failed
Related Questions in GPGPU
- OpenCL dynamic parallelism enqueue_kernel() functionality
- Sign a PGP public key using a private key and password, then save the signed key to a file
- Passing arguments to OpenCL kernel, before execution finished
- CUDA kernel for finding the min and max index of values in a 1D array greater than particular threshold
- Cuda __device__ member function with explicit template declaration
- AMD GPU Compute with c++
- Why is webgpu on mac "max binding size" much smaller than reported "max buffer size"?
- Running multiple times a python script from different threads using different gpus
- GPGPU with Radeon Pro VII in Windows
- Pytorch Memory Management Issue
- Perform vector calculation on GPU in C++, regardless of brand
- Reinterpret cast on *shared memory*
- Can I really launch a library kernel (CUkernel) rather than an in-context kernel (CUfunction)?
- How to use shared memory in PyCuda, LogicError: cuModuleLoadDataEx failed: an illegal memory access was encountered
- What (if anything) is this GPU compute or shader pattern called?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Well, you could try renderscript (assuming you are on android).
If it's not feasible, you could try something like this:
What you want to do could be accomplished by writing these data into a texture, where every texel is 1 or 0 depending on the data. Then you should perform something like mip-mapping on this texture until you have only 1 pixel. Then that 1 pixel will have the average value of all pixels combined, so you can calculate back exactly how many of them were 1, by multipying it with the size of your initial float array. E.g. if that 1 pixel's value is 0.25, and you had 400 data, then 100 of them had the value of 1.
Note: If the data does not fit into a texture entirely, (for example you have an odd number of data), fill the unused texels with 0.
Note2: Float precision may ruin precision if you have too much data... Make sure you are using a single channel texture format with the highest precision. Single channel 32bit textures (which you should aim for) are only available in opengl es 3.0 afaik, but check the specs.
tldr; you should make a texture, generate mipmaps for it, read the last mip level, and multiply it's value by the number of data items