簡體   English   中英

頂點着色器無法在Galaxy Tab10(積分2)上運行

[英]vertex shader doesn't run on galaxy tab10 (tegra 2)

我創建了一個在HTC Desire S上使用GLES2.0的應用程序。它可以在HTC上運行,但不能在Samung Galaxy tab10.1上運行。 該程序無法鏈接(GLES20.glGetProgramiv(mProgram,GLES20.GL_LINK_STATUS,linOk,0)給1),而glGetError()給我一個錯誤1282(無效操作)。

當我替換此行(在着色器中)時:

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

通過

graph_coord.z = 0.2;

它也可以在“銀河”選項卡上使用。 我的着色器如下所示:

 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的GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS ,Tegra的頂點着色器紋理單元( GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS )的數量為0( PDF:Tegra平台的OpenGL ES 2.0開發 )。

您必須使用texture2DLod()而不是texture2D()在頂點着色器中進行紋理查找。

GLSL規范,第8.7節“ 紋理查找功能”http : //www.khronos.org/files/opengles_shading_language.pdf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM