Просмотр исходного кода

* Running jME3-android in emulator with GPU emulation now supported but sometimes there are opengl errors (?)

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9428 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
Sha..rd 13 лет назад
Родитель
Сommit
1009cd18b0
1 измененных файлов с 26 добавлено и 26 удалено
  1. 26 26
      engine/src/android/com/jme3/renderer/android/OGLESShaderRenderer.java

+ 26 - 26
engine/src/android/com/jme3/renderer/android/OGLESShaderRenderer.java

@@ -131,40 +131,45 @@ public class OGLESShaderRenderer implements Renderer {
     public EnumSet<Caps> getCaps() {
     public EnumSet<Caps> getCaps() {
         return caps;
         return caps;
     }
     }
+    
+    private int extractVersion(String prefixStr, String versionStr) {
+        if (versionStr != null) {
+            int spaceIdx = versionStr.indexOf(" ", prefixStr.length());
+            if (spaceIdx >= 1) {
+                versionStr = versionStr.substring(prefixStr.length(), spaceIdx).trim();
+            } else {
+                versionStr = versionStr.substring(prefixStr.length()).trim();
+            }
+            float version = Float.parseFloat(versionStr);
+            return (int) (version * 100);
+        } else {
+            return -1;
+        }
+    }
 
 
     public void initialize() {
     public void initialize() {
         logger.log(Level.INFO, "Vendor: {0}", GLES20.glGetString(GLES20.GL_VENDOR));
         logger.log(Level.INFO, "Vendor: {0}", GLES20.glGetString(GLES20.GL_VENDOR));
         logger.log(Level.INFO, "Renderer: {0}", GLES20.glGetString(GLES20.GL_RENDERER));
         logger.log(Level.INFO, "Renderer: {0}", GLES20.glGetString(GLES20.GL_RENDERER));
         logger.log(Level.INFO, "Version: {0}", GLES20.glGetString(GLES20.GL_VERSION));
         logger.log(Level.INFO, "Version: {0}", GLES20.glGetString(GLES20.GL_VERSION));
-
+        logger.log(Level.INFO, "Shading Language Version: {0}", GLES20.glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION));
+        
         powerVr = GLES20.glGetString(GLES20.GL_RENDERER).contains("PowerVR");
         powerVr = GLES20.glGetString(GLES20.GL_RENDERER).contains("PowerVR");
         
         
-        String versionStr = GLES20.glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION);
-        logger.log(Level.INFO, "GLES20.Shading Language Version: {0}", versionStr);
-        if (versionStr == null || versionStr.equals("")) {
-            glslVer = -1;
-            throw new UnsupportedOperationException("GLSL and OpenGL2 is "
-                    + "required for the OpenGL ES "
-                    + "renderer!");
-        }
-
         // Fix issue in TestRenderToMemory when GL_FRONT is the main
         // Fix issue in TestRenderToMemory when GL_FRONT is the main
         // buffer being used.
         // buffer being used.
 
 
 //        initialDrawBuf = GLES20.glGetIntegeri(GLES20.GL_DRAW_BUFFER);
 //        initialDrawBuf = GLES20.glGetIntegeri(GLES20.GL_DRAW_BUFFER);
 //        initialReadBuf = GLES20.glGetIntegeri(GLES20.GL_READ_BUFFER);
 //        initialReadBuf = GLES20.glGetIntegeri(GLES20.GL_READ_BUFFER);
 
 
-        String openGlEsStr = "OpenGL ES GLSL ES ";
-        int spaceIdx = versionStr.indexOf(" ", openGlEsStr.length());
-        if (spaceIdx >= 1) {
-            versionStr = versionStr.substring(openGlEsStr.length(), spaceIdx).trim();
-        }else{
-            versionStr = versionStr.substring(openGlEsStr.length()).trim();
+        // Check OpenGL version 
+        int openGlVer = extractVersion("OpenGL ES ", GLES20.glGetString(GLES20.GL_VERSION));
+        if (openGlVer == -1) {
+            glslVer = -1;
+            throw new UnsupportedOperationException("OpenGL ES 2.0+ is required for OGLESShaderRenderer!");
         }
         }
-
-        float version = Float.parseFloat(versionStr);
-        glslVer = (int) (version * 100);
-
+        
+        // Check shader language version
+        glslVer = extractVersion("OpenGL ES GLSL ES ", GLES20.glGetString(GLES20.GL_SHADING_LANGUAGE_VERSION));
         switch (glslVer) {
         switch (glslVer) {
             // TODO: When new versions of OpenGL ES shader language come out, 
             // TODO: When new versions of OpenGL ES shader language come out, 
             // update this.
             // update this.
@@ -172,12 +177,7 @@ public class OGLESShaderRenderer implements Renderer {
                 caps.add(Caps.GLSL100);
                 caps.add(Caps.GLSL100);
                 break;
                 break;
         }
         }
-
-        if (!caps.contains(Caps.GLSL100)) {
-            logger.warning("Force-adding GLSL100 support, since OpenGL2 is supported.");
-            caps.add(Caps.GLSL100);
-        }
-
+        
         GLES20.glGetIntegerv(GLES20.GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, intBuf16);
         GLES20.glGetIntegerv(GLES20.GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, intBuf16);
         vertexTextureUnits = intBuf16.get(0);
         vertexTextureUnits = intBuf16.get(0);
         logger.log(Level.INFO, "VTF Units: {0}", vertexTextureUnits);
         logger.log(Level.INFO, "VTF Units: {0}", vertexTextureUnits);