android - 顶点着色器不在 galaxy tab10 (tegra 2) 上运行

标签 android opengl-es-2.0 galaxy-tab vertex-shader tegra

我在 HTC Desire S 上创建了一个使用 GLES2.0 的应用程序。 它适用于 HTC,但不适用于 Samung Galaxy tab10.1。 程序无法链接 (GLES20.glGetProgramiv(mProgram, GLES20.GL_LINK_STATUS, linOk,0) gives-1) 并且 glGetError() 给我一个错误 1282(无效操作)。

当我替换这一行时(在着色器中):

graph_coord.z = (texture2D(mytexture, graph_coord.xy / 2.0 + 0.5).r);

通过

graph_coord.z = 0.2;

它也适用于 galaxy 选项卡。 我的着色器看起来像这样:

 private final String vertexShaderCode =
"attribute vec2 coord2d;" +
"varying vec4 graph_coord;" +
"uniform mat4 texture_transform;" + 
"uniform mat4 vertex_transform;" +
"uniform sampler2D mytexture;" +
"void main(void) {" +
"  graph_coord = texture_transform * vec4(coord2d, 0, 1);" +
"  graph_coord.z = (texture2D(mytexture, graph_coord.xy / 2.0 + 0.5).r);" + 
"  gl_Position = vertex_transform * vec4(coord2d, graph_coord.z, 1);" + 
"}";

那是附加着色器的地方:

  mProgram = GLES20.glCreateProgram();             // create empty OpenGL Program
  GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
  GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
  GLES20.glLinkProgram(mProgram);                  // create OpenGL program executables
  int linOk[] = new int[1];
  GLES20.glGetProgramiv(mProgram, GLES20.GL_LINK_STATUS, linOk,0);

纹理加载到这里:

 GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture_id[0]);
 GLES20.glTexImage2D(
        GLES20.GL_TEXTURE_2D,   // target
    0,                  // level, 0 = base, no minimap,
    GLES20.GL_LUMINANCE,       // internalformat
    size,                  // width
    size,                  // height
    0,                  // border, always 0 in OpenGL ES
    GLES20.GL_LUMINANCE,       // format
    GLES20.GL_UNSIGNED_BYTE,   // type
    values
 );

最佳答案

这似乎是 Nvidia Tegra GPU 的限制。我能够在 Tegra 3 GPU 上重现错误。尽管顶点着色器中的纹理查找理论上是 OpenGL ES 2.0 的一部分,但根据 Nvidia 的说法,Tegra 的顶点着色器纹理单元数 (GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS) 为 0 (PDF: OpenGL ES 2.0 Development for the Tegra Platform)。

关于android - 顶点着色器不在 galaxy tab10 (tegra 2) 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11398114/

相关文章:

android - 通过 facebook 为 android jelly bean 分享 Intent

ios - 使用带有许多独特图元的实例绘图时,CPU与内存之间的权衡

ios - GLK View Controller : Setting up independent objects using GLKit

android - SensorManager 类型加速计在 Galaxy Tab 3 Lit 7.0"上不起作用

Android MediaCodec 编码器 - 三星设备的奇怪结果

android - 是什么导致了 IOException 和 Broken pipe

java - 在位图压缩时保留图像的分辨率

android - 如果 webview 中没有可用的 favicon,则显示 favicon-default.png

android - OpenGL ES 1.x vs. 2.x : OpenGL ES 1. x 还值得学习吗?

android - 在 Android 上播放 mp4 文件时没有视频显示