【问题标题】:Android test with OpenGL ES Shaders使用 OpenGL ES 着色器进行 Android 测试
【发布时间】:2012-03-08 20:49:20
【问题描述】:

我编写了一个测试类,它应该只将应用程序图标绘制到屏幕上。到目前为止还没有运气。我做错了什么?

public class GLTester
{


void test(final Context context)
{
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inScaled = false;
    bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon, options);

    setupGLES();
    createProgram();
    setupTexture();
    draw();
}


void draw()
{
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    glUseProgram(glProgramHandle);

}
}

【问题讨论】:

    标签: android opengl-es shader


    【解决方案1】:

    几件事。

    我认为您的 squareVertices 缓冲区应该包含 4 个 vec3。但是你的着色器是为 vec4s 设置的。也许这没问题,但对我来说似乎很奇怪。

    您也没有使用 glFrustum 或 glOrtho 设置任何类型的透视矩阵,也没有使用 Matrix.setLookAtM 等设置任何类型的查看矩阵。您也应该始终牢记顶点管道。请看本讲座的幻灯片 2 https://wiki.engr.illinois.edu/download/attachments/195761441/3-D+Transformational+Geometry.pptx?version=2&modificationDate=1328223370000

    我认为正在发生的事情是您的 squareVertices 正在通过这条管道并作为像素坐标从另一侧出来。因此,您的图像可能是屏幕角落中的一个非常小的规格,因为您使用的是从 -1.0 到 1.0 的顶点。

    作为一个无耻的旁注,我在 SourceForge 上发布了一些代码,它可以从资产文件夹中的文件处理和加载着色器,而不必在 .java 文件中作为字符串执行。 https://sourceforge.net/projects/androidopengles/ 文件部分中有一个使用此着色器帮助程序的示例项目。

    我希望这篇漫无边际的部分内容对您有所帮助。 :)

    【讨论】:

      【解决方案2】:

      它看起来不错,但我看到一方面你在 setupTexture 中调用 glUniform,而着色器没有当前绑定。只应在调用 glUseProgram 后调用 glUniform。

      我不知道这是否是问题所在,因为我猜它可能会默认为 0,但我不确定。

      除此之外,您应该熟悉调用 glGetError 来检查是否有任何错误条件未决。

      另外,在创建着色器时,使用 glGetShader(GL_COMPILE_STATUS) 检查它们的成功状态是一个好习惯,如果编译失败,也会使用 glGetShaderInfoLog,对于使用 glGetProgram/glGetProgramInfoLog 的程序也是如此。

      【讨论】:

      • 我做了你的推荐,我把 glGetError 放在每个 GLES 调用下。我在 GLES20.glEnable(GLES20.GL_TEXTURE_2D); 下收到错误 1280;经过一些研究,我发现着色器和 GLES 不需要此调用。我还删除了 glUniform 并添加了代码来检查着色器和程序编译状态。但到目前为止没有运气,我看不到在屏幕上绘制的位图。应该很容易发现问题,但我正在拉扯我的头发来找出它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多