Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自VBOs的OpenGLES 2.0三角形的Android子集不会出现在一个测试设备上,而在另一个测试设备上却可以正常工作_Android_Opengl Es_Glsl_Opengl Es 2.0 - Fatal编程技术网

来自VBOs的OpenGLES 2.0三角形的Android子集不会出现在一个测试设备上,而在另一个测试设备上却可以正常工作

来自VBOs的OpenGLES 2.0三角形的Android子集不会出现在一个测试设备上,而在另一个测试设备上却可以正常工作,android,opengl-es,glsl,opengl-es-2.0,Android,Opengl Es,Glsl,Opengl Es 2.0,我正在用GLSURFACHEVIEW渲染一些超分辨率的nexrad雷达数据。我的测试文件中有1377156个顶点。XY的位置为GL_FLOAT类型,RGBA的颜色为GL_UNSIGNED_BYTE类型。每个顶点总共12个字节 在新款Moto X上,一切看起来都完全符合预期。但是在Nexus7上,它只在正确的位置渲染大约3/4的三角形。还有一些三角形出现在它们不应该出现的地方 Nexus 7: Moto X 2014: GLES20.glGetError返回GLES20.GL_无错误。我有一个iO

我正在用GLSURFACHEVIEW渲染一些超分辨率的nexrad雷达数据。我的测试文件中有1377156个顶点。XY的位置为GL_FLOAT类型,RGBA的颜色为GL_UNSIGNED_BYTE类型。每个顶点总共12个字节

在新款Moto X上,一切看起来都完全符合预期。但是在Nexus7上,它只在正确的位置渲染大约3/4的三角形。还有一些三角形出现在它们不应该出现的地方

Nexus 7:

Moto X 2014:

GLES20.glGetError返回GLES20.GL_无错误。我有一个iOS版本,共享大致相同的渲染代码和顶点/着色器程序,使用的测试文件与iPad2上的测试文件完全相同

绘图代码

if(renderVertices) {
        int numVertices = 1377156;

        if(loadVertices){
            GLES20.glGenBuffers(1, radarVBO, 0);
            GLES20.glGenBuffers(1, colorVBO, 0);
            myBuffer.position(0);
            GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, radarVBO[0]);
            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER,  numVertices*8 , myBuffer, GLES20.GL_STATIC_DRAW);
            colorBuffer.position(0);
            GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, colorVBO[0]);
            GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER,  numVertices*4 , colorBuffer, GLES20.GL_STATIC_DRAW);
            loadVertices = false;
        }
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, radarVBO[0]);
        GLES20.glVertexAttribPointer(positionHandle, VERTEX_POS_SIZE, GLES20.GL_FLOAT, false, 0, 0);
        GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, colorVBO[0]);
        GLES20.glVertexAttribPointer(colorHandle, VERTEX_COLOR_SIZE, GLES20.GL_UNSIGNED_BYTE, true, 0,0);
        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0,numVertices);
}
片段程序

varying lowp vec4 colorVarying;

void main()
{
    gl_FragColor = colorVarying.rgba;
}
顶点程序

attribute vec2 position;
attribute vec4 color;

varying lowp vec4 colorVarying;
uniform mat4 modelViewProjectionMatrix;

void main()
{
    colorVarying = color;
    gl_Position = modelViewProjectionMatrix * vec4(position, 0.0, 1.0);
}

在两个GlvertexAttributePointer调用之后是否缺少GLES20.GlenableVertexAttributeArray调用?如果使draw调用变小,是否有效?您可以尝试使用较小的批处理进行多个glDrawArrays调用,而不是对所有三角形进行一次调用。@harism我以前在OnSurface中创建了GlenableVertexAttributeArray调用。我试着将它们转移到抽签呼叫,但没有帮助。@reto koradi我尝试了100000批,结果是一样的。也许我会在更多的设备上试用,看看是否有其他设备有同样的问题。我开始认为这可能是硬件问题。最可能的解释是特定设备的缓冲区大小有问题。与其说是硬件问题,不如说是软件问题。您正在分配的缓冲区超过10 MB,这是相当大的,但它不是一个荒谬的内存量。