2016-08-12 5 views
0

私にはあまり意味がない問題が発生しています。私はHTCのNexus 6デバイスでいくつかの簡単なGLES30コードをテストしています。私はAPI 23とOS lollipop 5.0にコードを設定しています。はネクサス6(および類似のデバイス)でgles 30をコンパイルできません

シェーダコード:

#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; 
} 

ログのwikiによれば、簡単なシェーダは以下のようにコンパイルを失敗し、それでもフルGLES 3.1プロファイル

https://en.wikipedia.org/wiki/Nexus_6をサポート副腎420を使用しています。

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 

私のコンテキストを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

通常、これはデバイスが必要とするGLSLバージョンをサポートしていないことを意味します。あなたはこの形式を読み取る方法を決定することができますGLSLバージョンがhereからGLSL 3.

glGetString(GL_SHADING_LANGUAGE_VERSION); 

をサポートしていることを確認するために、次のコードを実行してみてください。

文字列GL_VERSIONおよびGL_SHADING_LANGUAGE_VERSIONは、バージョン番号で始まります。バージョン番号は、次のいずれかの形式を使用します。 major_number.minor_number major_number.minor_number.release_number ベンダー固有の情報がバージョン番号の後に続く場合があります。そのフォーマットは実装に依存しますが、スペースは常にバージョン番号とベンダー固有の情報を分けます。

ここでは現在使用している設定を示します。

#define EGL_OPENGL_ES3_BIT_KHR 0x0040 
const EGLint attribs[] = { 
    EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT_KHR, 
    EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 
    EGL_BLUE_SIZE, 8, 
    EGL_GREEN_SIZE, 8, 
    EGL_RED_SIZE, 8, 
    EGL_ALPHA_SIZE, 8, 
    EGL_DEPTH_SIZE, 8, 
    EGL_STENCIL_SIZE, 8, 
    EGL_NONE 
}; 
... 
eglChooseConfig(display, attribs, &config, 1, &numConfigs); 
... 
EGLint openGLVersionRequested = 3; 
EGLint contextAttribs[] = { 
    EGL_CONTEXT_CLIENT_VERSION, 
    openGLVersionRequested,  // selects OpenGL ES 3.0, set to 2 to select OpenGL ES 2.0 
    EGL_NONE 
}; 
context = eglCreateContext(display, config, NULL, contextAttribs); 
if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) { 
    LOGW("Unable to eglMakeCurrent"); 
    return -1; 
} 
+0

ドライバのアップデートに問題がありました。 – gmmo

関連する問題