无法在nexus 6(及类似设备)上编译gles 30

时间:2016-08-12 18:21:01

标签: opengl-es android-ndk opengl-es-3.0

我遇到了一个对我来说没有多大意义的问题。我正在测试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!

1 个答案:

答案 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);