瀏覽代碼

Enable OpenGL ES2 mode properly.
Fixed shaders.

Lasse Öörni 13 年之前
父節點
當前提交
22f1e3a1eb

+ 3 - 1
Android/AndroidManifest.xml

@@ -3,7 +3,9 @@
       package="org.libsdl.app"
       android:versionCode="1"
       android:versionName="1.0">
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-feature android:glEsVersion="0x00020000" />
+    <uses-sdk android:targetSdkVersion="8" android:minSdkVersion="8" />
     <application android:label="@string/app_name" android:icon="@drawable/icon">
         <activity android:name="SDLActivity"
                   android:label="@string/app_name">

+ 2 - 1
Android/src/org/libsdl/app/SDLActivity.java

@@ -83,7 +83,7 @@ public class SDLActivity extends Activity {
     protected void onDestroy() {
         super.onDestroy();
         Log.v("SDL", "onDestroy()");
-        
+
         mFinished = true;
 
         // Send a quit message to the application
@@ -182,6 +182,7 @@ public class SDLActivity extends Activity {
 
     // EGL functions
     public static boolean initEGL(int majorVersion, int minorVersion) {
+
         if (SDLActivity.mSingleton.mEGLDisplay == null) {
             //Log.v("SDL", "Starting up OpenGL ES " + majorVersion + "." + minorVersion);
 

+ 8 - 2
Engine/Graphics/OpenGL/OGLGraphics.cpp

@@ -57,7 +57,7 @@
 #include "DebugNew.h"
 
 #ifdef GL_ES_VERSION_2_0
-#define GL_DEPTH_COMPONENT24 GL_DEPTH_COMPONENT16
+#define GL_DEPTH_COMPONENT24 GL_DEPTH_COMPONENT24_OES
 #define GL_FRAMEBUFFER_EXT GL_FRAMEBUFFER
 #define GL_RENDERBUFFER_EXT GL_RENDERBUFFER
 #define GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT0
@@ -237,6 +237,8 @@ bool Graphics::SetMode(int width, int height, bool fullscreen, bool vsync, bool
         SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
         SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0);
         SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
+        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
+        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
         
         if (multiSample > 1)
         {
@@ -1886,8 +1888,12 @@ void Graphics::CheckFeatureSupport()
     int numSupportedRTs = 1;
     #ifndef GL_ES_VERSION_2_0
     glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &numSupportedRTs);
+    #else
+    // For now disable shadow mapping on OpenGL ES
+    shadowMapFormat_ = 0;
+    hiresShadowMapFormat_ = 0;
     #endif
-
+    
     // For now hardware depth texture is only tested for on NVIDIA hardware because of visual artifacts and slowdown on ATI
     String vendorString = String((const char*)glGetString(GL_VENDOR)).ToUpper();
     if (vendorString.Find("NVIDIA") != String::NPOS)

+ 2 - 1
Engine/Graphics/OpenGL/OGLShaderProgram.cpp

@@ -90,7 +90,8 @@ bool ShaderProgram::Link()
     {
         glGetProgramiv(object_, GL_INFO_LOG_LENGTH, &length);
         linkerOutput_.Resize(length);
-        glGetProgramInfoLog(object_, length, &length, &linkerOutput_[0]);
+        int outLength;
+        glGetProgramInfoLog(object_, length, &outLength, &linkerOutput_[0]);
     }
     else
         linkerOutput_.Clear();

+ 7 - 2
Engine/Graphics/OpenGL/OGLShaderVariation.cpp

@@ -112,7 +112,11 @@ bool ShaderVariation::Create()
         defines += "\n";
     
     #ifdef GL_ES_VERSION_2_0
-    defines += "precision medp float;\n";
+    if (shaderType_ == PS)
+    {
+        defines += "precision mediump float;\n";
+        shaderCode.Replace("sampler2DShadow", "sampler2D");
+    }
     #endif
     
     shaderCode = version + defines + shaderCode;
@@ -128,7 +132,8 @@ bool ShaderVariation::Create()
     {
         glGetShaderiv(object_, GL_INFO_LOG_LENGTH, &length);
         compilerOutput_.Resize(length);
-        glGetShaderInfoLog(object_, length, &length, &compilerOutput_[0]);
+        int outLength;
+        glGetShaderInfoLog(object_, length, &outLength, &compilerOutput_[0]);
     }
     else
         compilerOutput_.Clear();