Android 5.1.1(Opengl 3.1)中的计算着色器

Android 5.1.1(Opengl 3.1)中的计算着色器,android,opengl-es,compute-shader,Android,Opengl Es,Compute Shader,我编写了一个非常简单的程序,从计算着色器中获取值,并将其直接渲染到屏幕上 在调用所有必要的计算着色器方法后,我怀疑着色器存储缓冲区没有绑定到我的vbo 我正在共享代码,请查看是否有一些错误。我没有得到编译错误,而且我使用的设备也支持我检查过的gl 3.1 除此之外,我们还要提到清单上的任何东西吗 这是我的渲染器代码 公共类MyRenderer实现渲染器{ 语境; int程序ID; int计算haderprogramid; 内定位; 内部颜色定位; 内放射定位; int-gIndexBuffer

我编写了一个非常简单的程序,从计算着色器中获取值,并将其直接渲染到屏幕上

在调用所有必要的计算着色器方法后,我怀疑着色器存储缓冲区没有绑定到我的vbo

我正在共享代码,请查看是否有一些错误。我没有得到编译错误,而且我使用的设备也支持我检查过的gl 3.1

除此之外,我们还要提到清单上的任何东西吗

这是我的渲染器代码

公共类MyRenderer实现渲染器{ 语境; int程序ID; int计算haderprogramid; 内定位; 内部颜色定位; 内放射定位; int-gIndexBufferBinding; 浮动半径=0; int[]vbo=新的int[1]; int NUM_VERTS_H=16; int NUM_VERTS_V=16; 整数组大小宽度=8; 整数组大小高度=8; MyRenderContext上下文 { this.context=上下文; } @凌驾 在SurfaceCreateDGL10总账、EGLConfig配置上的公共无效{ GLES31.glClearColor0.0f、0.0f、0.0f、1.0f; GLES20.GlenableS20.GL_深度试验; } @凌驾 表面上的公共空隙更改DGL10 gl,整型宽度,整型高度{ //TODO自动生成的方法存根 字符串VetrexShaderSource=ShaderHelper.readFilecontext,R.raw.vertexshader; 字符串FragmentShaderSource=ShaderHelper.readFilecontext,R.raw.fragmentshader; 字符串ComputeShaderSource=ShaderHelper.readFilecontext,R.raw.hellocompute; int vertexShader=ShaderHelper.compileShaderVetrexShaderSource,GLES31.GL_VERTEX_着色器; int fragmentShader=ShaderHelper.compileShaderFragmentShaderSource,GLES31.GL_FRAGMENT_着色器; int computeShader=ShaderHelper.compileShaderComputeShaderSource,GLES31.GL_COMPUTE_着色器; ProgramId=ShaderHelper.createShaderProgramvertexShader,fragmentShader; GLES31.glUseProgramProgramId; aPositionLocation=GLES31.glGetAttriblLocationProgramId,一个位置; aColorLocation=GLES31.glGetAttriblLocationProgramId,aColorCoordinate; ComputeShaderProgramId=ShaderHelper.CreateCuteShaderProgramComputeShader; GLES31.glUseProgramComputeShaderProgramId; gIndexBufferBinding=1; GLES31.glGenBuffers1,vbo,0; } @凌驾 公共空间框架GL10 gl{ GLES31.GLCLEARS31.GL_颜色_缓冲_位| GLES31.GL_深度_缓冲_位; GLES31.glUseProgramComputeShaderProgramId; GLES31.glBindBufferBaseGLES31.GL_SHADER_STORAGE_BUFFER,gIndexBufferBinding,vbo[0]; //GLES31.glDispatchCompute //顶点数H%组大小宽度+顶点数H/组大小宽度, //垂直数百分比组大小高度+垂直数/组大小高度, // 1; GLES31.glDispatchCompute2,1,1; GLES31.glBindBufferBaseGLES31.GL_SHADER_STORAGE_BUFFER,gIndexBufferBinding,0; GLES31.glMemoryBarrierGLES31.GL_着色器_存储_屏障_位; System.out.printlnerror+GLES31.glGetError; //绑定VBO GLES31.glBindBuffer GLES31.GL_数组_BUFFER,vbo[0]; //绑定顶点和片段渲染着色器 GLES31.glUseProgramProgramId; GLES31.GlenableVertexAttributeArrayLocation; //从VBO中绘制点 GLES31.glDrawArraysGLES31.GLU点,0,6; }
}我在任何地方都没有看到GlvertexAttributePointer调用。我甚至添加了一个调用GLES31.GlvertexAttributePointerPositionLocation,1,GLES31.GL_FLOAT,true,0,0;GLES31之后。GLENABLEVERTEXATTRIBARYA位置;但屏幕上仍然没有显示任何内容。感谢您的帮助,Reto Koradi。我搞错了,我没有为SSBO分配内存。我调用了GLES31.glBufferDataGLES31.GL_SHADER_STORAGE_BUFFER,6*4,null,GLES31.GL_STATIC_DRAW;之后,我的基础和它的工作感谢。