0031580: Visualization, TKOpenGl - cubemap initialization error on OpenGL ES 2.0
authorkgv <kgv@opencascade.com>
Wed, 27 May 2020 10:36:17 +0000 (13:36 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 28 May 2020 07:21:03 +0000 (10:21 +0300)
OpenGl_Texture::InitCubeMap() now avoids using sized internal format in case of GLES2.
OpenGl_Sampler::applySamplerParams() now checks OpenGL version before setting GL_TEXTURE_WRAP_R.

src/OpenGl/OpenGl_Sampler.cxx
src/OpenGl/OpenGl_Texture.cxx

index 3ec1e07..08fcd7c 100644 (file)
@@ -226,7 +226,10 @@ void OpenGl_Sampler::applySamplerParams (const Handle(OpenGl_Context)& theCtx,
   if (theTarget == GL_TEXTURE_3D
    || theTarget == GL_TEXTURE_CUBE_MAP)
   {
-    setParameter (theCtx, theSampler, theTarget, GL_TEXTURE_WRAP_R, aWrapMode);
+    if (theCtx->HasTextureBaseLevel())
+    {
+      setParameter (theCtx, theSampler, theTarget, GL_TEXTURE_WRAP_R, aWrapMode);
+    }
     return;
   }
 
index 383e7f5..48d2739 100644 (file)
@@ -987,6 +987,13 @@ bool OpenGl_Texture::InitCubeMap (const Handle(OpenGl_Context)&    theCtx,
   mySizeY = (GLsizei )theSize;
   myTextFormat  = aFormat.Format();
   mySizedFormat = aFormat.Internal();
+#if !defined(GL_ES_VERSION_2_0)
+  const GLint anIntFormat = aFormat.InternalFormat();
+#else
+  // ES 2.0 does not support sized formats and format conversions - them detected from data type
+  const GLint anIntFormat = theCtx->IsGlGreaterEqual (3, 0) ? aFormat.InternalFormat() : aFormat.PixelFormat();
+#endif
+
   Bind (theCtx);
   applyDefaultSamplerParams (theCtx);
 
@@ -1080,7 +1087,7 @@ bool OpenGl_Texture::InitCubeMap (const Handle(OpenGl_Context)&    theCtx,
     }
 
     glTexImage2D (GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0,
-                  aFormat.InternalFormat(),
+                  anIntFormat,
                   GLsizei(theSize), GLsizei(theSize),
                   0, aFormat.PixelFormat(), aFormat.DataType(),
                   aData);