Implement support for floating point textures.
Trac #12909

Implements GL_OES_texture_float, GL_OES_texture_half_float,
GL_OES_texture_float_linear, and GL_OES_texture_half_float_linear
when supported by the hardware.

Signed-off-by: Nicolas Capens
Signed-off-by: Daniel Koch

Author:    Shannon Woods <shannon.woods@transgaming.com>

git-svn-id: https://angleproject.googlecode.com/svn/trunk@404 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 48ef8fc..43d7ee5 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -266,6 +266,8 @@
         mMaxSupportedSamples = max;
 
         mSupportsCompressedTextures = display->getCompressedTextureSupport();
+        mSupportsFloatTextures = display->getFloatTextureSupport(&mSupportsFloatLinearFilter);
+        mSupportsHalfFloatTextures = display->getHalfFloatTextureSupport(&mSupportsHalfFloatLinearFilter);
 
         initExtensionString();
 
@@ -2793,6 +2795,26 @@
     return mSupportsCompressedTextures;
 }
 
+bool Context::supportsFloatTextures() const
+{
+    return mSupportsFloatTextures;
+}
+
+bool Context::supportsFloatLinearFilter() const
+{
+    return mSupportsFloatLinearFilter;
+}
+
+bool Context::supportsHalfFloatTextures() const
+{
+    return mSupportsHalfFloatTextures;
+}
+
+bool Context::supportsHalfFloatLinearFilter() const
+{
+    return mSupportsHalfFloatLinearFilter;
+}
+
 void Context::detachBuffer(GLuint buffer)
 {
     // [OpenGL ES 2.0.24] section 2.9 page 22:
@@ -2994,6 +3016,26 @@
         mExtensionString += "GL_EXT_texture_compression_dxt1 ";
     }
 
+    if (supportsFloatTextures())
+    {
+        mExtensionString += "GL_OES_texture_float ";
+    }
+
+    if (supportsHalfFloatTextures())
+    {
+        mExtensionString += "GL_OES_texture_half_float ";
+    }
+
+    if (supportsFloatLinearFilter())
+    {
+        mExtensionString += "GL_OES_texture_float_linear ";
+    }
+
+    if (supportsHalfFloatLinearFilter())
+    {
+        mExtensionString += "GL_OES_texture_half_float_linear ";
+    }
+
     if (getMaxSupportedSamples() != 0)
     {
         mExtensionString += "GL_ANGLE_framebuffer_multisample ";