Как выгрузить контент ssbo в процессор для оценки - PullRequest
0 голосов
/ 03 апреля 2020

Платформа: 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 - все ноль, для которого я застрял три дня и погуглили где угодно, но не отстали

...