幼敏悟过人,读书辄成诵。这篇文章主要讲述Android OpenGL ES 3.1着色器无法编译相关的知识,希望能为你提供帮助。
我无法在运行android 8.1.0的Pixel C平板电脑上使用OpenGL ES 3.1编译这个空的计算着色器:
“shader.comp”
#version 310 esvoid main()
{}
我正在使用资产管理器从文件中读取此源,如下所示,我的所有GL调用都使用java绑定而不是本机代码和NDK:
String shaderSource;
AssetManager assets = context.getAssets();
InputStream shaderStream;
try
{
shaderStream = assets.open("shader.comp");
} // catch etc...
shaderSource = shaderStream.toString();
// Compile source
int shaderObject = GLES31.glCreateShader(GLES31.GL_COMPUTE_SHADER);
GLES31.glShaderSource(shaderObject, shaderSource);
GLES31.glCompileShader(shaderObject);
// Get info about compilation
GLES31.glGetShaderiv(shaderObject, GLES31.GL_COMPILE_STATUS, status, 0);
if (status[0] != GLES31.GL_TRUE)
{
Log.e("ComputeShader",
"Compute Shader did not compile: " +
GLES31.glGetShaderInfoLog(shaderObject));
}// Link etc..
我得到的错误令人困惑:
Compute Shader did not compile: 0(1) : error C0000: syntax error, unexpected '.', expecting "::" at token "."
没有“。”在着色器源中。您是否认为这可能与输入流的
.toString()
转换所使用的编码有关? Android上的OpenGL ES的Java文档很大程度上是不完整的,因此没有什么帮助。此类错误还有其他可能的原因吗?答案【Android OpenGL ES 3.1着色器无法编译】正如Morrison Chang所提到的,这里的问题是我试图用
.toString()
将InputStream
内容提取到String
中的java.lang.Object
方法是继承自shaderSource = shaderStream.toString()
而不是某些具体实现的方法。这里的教训是始终检查文档,而不是假设您知道如何从其名称实现方法。为了执行所需的操作,我用以下内容替换了
BufferedReader reader = new BufferedReader(new InputStreamReader(shaderStream, "UTF-8"));
// Read each line
String line;
StringBuilder contents = new StringBuilder();
while ((line = reader.readLine()) != null)
{
// Add line to the file contents with a new line character at the end as they are stripped out by the readLine() method
contents.append(line);
contents.append('
');
}
shaderSource = contents.toString();
行:StringBuilder.toString()
qazxswpoi方法是我想要的覆盖。
推荐阅读
- Android openGL GLES20.glUniformMatrix4fv到java
- Android OpenGL camera2纹理分辨率
- Android NDK GLThread
- 如何在Symfony 3中使用Google Translate免费翻译不同语言的文本
- FOSUserBundle(必须配置路径”fos_user”的子节点”from_email”)
- 如何在Symfony 3中检测移动设备
- 如何在WinForms中为CefSharp启用WebRTC(访问摄像机和麦克风)
- 如何在Symfony 3中将数字转换为单词(数字拼写)
- 如何解决MySQL常规错误(1030从存储引擎得到了139错误)