Платформа: android Opengl es 3.1
// create ssbo --> texture shader program
String shaderCode =
" #version 310 es\n" +
" #extension GL_OES_EGL_image_external_essl3: enable\n" +
" precision mediump float;\n" + // need to specify 'mediump' for float
//" layout(local_size_x = 16, local_size_y = 16) in;\n" +
" layout(local_size_x = 8, local_size_y = 8) in;\n" +
//" layout(binding = 0) uniform sampler2D in_data; \n" +
" layout(binding = 0) uniform samplerExternalOES in_data; \n" +
" layout(std430) buffer;\n" +
" layout(binding = 1) buffer Input { float elements[]; } out_data;\n" +
" void main() {\n" +
" ivec2 gid = ivec2(gl_GlobalInvocationID.xy);\n" +
" if (gid.x >= " + img_cx + " || gid.y >= " + img_cy + ") return;\n" +
" vec2 uv = vec2(gl_GlobalInvocationID.xy) / " + img_cx + ".0;\n" +
" vec4 pixel = texture (in_data, uv);\n" +
" int idx = 3 * (gid.y * " + img_cx + " + gid.x);\n" +
//" if (gid.x >= 120) pixel.x = 1.0;\n" + // DEBUG...
" out_data.elements[idx + 0] = pixel.x;\n" +
" out_data.elements[idx + 1] = pixel.y;\n" +
" out_data.elements[idx + 2] = pixel.z;\n" +
" }";
Выше мой вычислительный шейдер. Я пытался использовать glMapBufferRange для сопоставления out_data с процессором для оценки, но возвращенный reuslt - все ноль, для которого я застрял три дня и погуглили где угодно, но не отстали