2

我有一个 opengles 3.1 应用程序,可以在桌面上很好地呈现,但不能在 android 上呈现。

出错的地方是当我有统一的缓冲区对象时。在顶点着色器中,我有以下示例

layout (std140, binding = 0) uniform matrixUbo
{
  mat4 projection;
  mat4 view;
};

使用桌面驱动程序可以正常工作,但在 android 上它会失败。我正在测试的 opengles 版本是 3.2 兼容的,并且函数调用在 android 中可用。

我已经尝试在顶点着色器中设置绑定并使用 glUniformBlockBinding 方法设置它们,但两者都不能在 android 上工作(但都可以在桌面上工作)。

如果我不使用这些来矩阵化,那么对象确实可以渲染(我可以在我的 android 手机上看到它们正常)但是当我包含这些矩阵时,没有绘制任何内容,这告诉我矩阵充满了零。

为了在 android 上支持 UBO,有什么特别需要做的吗?

我很乐意根据需要提供更多信息。

4

1 回答 1

1

为了回答我自己的问题,android opengl es 3.1 支持它们,但是当您更新数据时,您需要使用 ByteBuffer 而不是 FloatBuffer,即使函数调用支持它。奇怪的问题和调试的痛苦!

于 2017-05-10T15:33:35.880 回答