我遇到了一个对我来说没有多大意义的问题。我正在测试Nexus 6设备和HTC上的一些简单的GLES30代码。我将代码设置为API 23和OS棒棒糖5.0。根据维基,它使用Adreno 420,它支持完整的gles 3.1 profile
https://en.wikipedia.org/wiki/Nexus_6
然而,一个简单的着色器未能完成如下编译:
着色器代码:
#version 300 es
layout(location = 4) in vec4 a_position;
layout(location = 5) in vec4 a_color;
uniform mat4 u_mvpMatrix;
out vec4 v_color;
void main()
{
v_color = a_color;
gl_Position = u_mvpMatrix * a_position;
}
日志:
Vertex shader failed to compile with the following errors:
ERROR: 0:2: error(#308) Profile " " is not available in shader version 1777753240
ERROR: 0:1: error(#132) Syntax error: "es" parse error
ERROR: error(#273) 2 compilation errors. No code generated
我将Context设置为3.0,如下所示。
const EGLint context_attribs[] = {EGL_CONTEXT_CLIENT_VERSION,
3, // Request opengl ES3.0
EGL_NONE};
context_ = eglCreateContext(display_, config_, NULL, context_attribs);
仍然没有编译。
我错过了什么吗?
THX!
答案 0 :(得分:0)
通常,这意味着您的设备不支持您需要的GLSL版本。尝试运行以下代码以确认GLSL版本支持GLSL 3。
function updateNumbersAfterArticles(searchableid, number){
var m_searchableid = new ObjectId(searchableid);
m_Kbase_data.findOne( {_id : m_searchableid}, function(err, kbase_data){
if (kbase_data.Steps.length === 1){
var updated_step = new m_KbaseScript_schema({step: kbase_data.Steps[0].step + 1, description : kbase_data.Steps[0].description, image : kbase_data.Steps[0].image});
m_Kbase_data.update({_id : m_searchableid, 'Step._id' : kbase_data.Steps[0]._id },
{$set: { "Steps.$": updated_step }},
function(err, updateRows){
//if (err) res.status(500);
console.log(updateRows);
}
);
return;
}
else{
var updated_step2 = kbase_data.Steps;
for (var i = 1; i < kbase_data.Steps.length; i++) {
if (kbase_data.Steps[i].step >= number){
//console.log("pushed");
kbase_data.Steps[i].step = kbase_data.Steps[i].step + 1;
kbase_data.markModified('Steps');
}
}
kbase_data.save();
}
});
}
从here,您可以确定如何阅读此格式。
GL_VERSION和GL_SHADING_LANGUAGE_VERSION字符串以版本号开头。版本号使用以下形式之一: major_number.minor_number major_number.minor_number.release_number 特定于供应商的信息可以遵循版本号。其格式取决于实现,但空格总是将版本号和特定于供应商的信息分开。
这是我目前使用的配置。
glGetString(GL_SHADING_LANGUAGE_VERSION);