0028734: Visualization, OpenGl_Texture - fix initialization of 1D texture
authorisk <isk@opencascade.com>
Thu, 14 Apr 2016 09:04:54 +0000 (12:04 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 18 May 2017 09:00:03 +0000 (12:00 +0300)
OpenGl_Texture::Init() - fixed proxy check for 1D textures.
Declarations.glsl - defined occTexture1D/3D aliases similar to occTexture2D.

src/OpenGl/OpenGl_Texture.cxx
src/Shaders/Declarations.glsl
src/Shaders/Shaders_Declarations_glsl.pxx

index 3b03c64..0603ce5 100644 (file)
@@ -413,6 +413,14 @@ bool OpenGl_Texture::Init (const Handle(OpenGl_Context)& theCtx,
   const GLint anIntFormat  = theCtx->IsGlGreaterEqual (3, 0) ? theTextFormat : thePixelFormat;
 #endif
 
+  if (theDataType == GL_FLOAT && !theCtx->arbTexFloat)
+  {
+    theCtx->PushMessage (GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_ERROR, 0, GL_DEBUG_SEVERITY_HIGH,
+                         "Error: floating-point textures are not supported by hardware.");
+    Release (theCtx.operator->());
+    return false;
+  }
+
   const GLsizei aMaxSize = theCtx->MaxTextureSize();
   if (theSizeX > aMaxSize
    || theSizeY > aMaxSize)
@@ -515,7 +523,7 @@ bool OpenGl_Texture::Init (const Handle(OpenGl_Context)& theCtx,
       glTexImage1D (GL_PROXY_TEXTURE_1D, 0, anIntFormat,
                     theSizeX, 0,
                     thePixelFormat, theDataType, NULL);
-      glGetTexLevelParameteriv (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &aTestWidth);
+      glGetTexLevelParameteriv (GL_PROXY_TEXTURE_1D, 0, GL_TEXTURE_WIDTH, &aTestWidth);
       if (aTestWidth == 0)
       {
         // no memory or broken input parameters
@@ -540,6 +548,8 @@ bool OpenGl_Texture::Init (const Handle(OpenGl_Context)& theCtx,
       Unbind (theCtx);
       return true;
     #else
+      theCtx->PushMessage (GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_ERROR, 0, GL_DEBUG_SEVERITY_HIGH,
+                           "Error: 1D textures are not supported by hardware.");
       Release (theCtx.operator->());
       return false;
     #endif
index 716eed8..001565e 100644 (file)
   #define THE_SHADER_IN  in
   #define THE_SHADER_OUT out
   #define THE_OUT        out
+  #define occTexture1D   texture
   #define occTexture2D   texture
+  #define occTexture3D   texture
 #else
   #define THE_ATTRIBUTE  attribute
   #define THE_SHADER_IN  varying
   #define THE_SHADER_OUT varying
   #define THE_OUT
+  #define occTexture1D   texture1D
   #define occTexture2D   texture2D
+  #define occTexture3D   texture3D
 #endif
 
 #ifdef GL_ES
index d2d9191..7476af2 100644 (file)
@@ -27,13 +27,17 @@ static const char Shaders_Declarations_glsl[] =
   "  #define THE_SHADER_IN  in\n"
   "  #define THE_SHADER_OUT out\n"
   "  #define THE_OUT        out\n"
+  "  #define occTexture1D   texture\n"
   "  #define occTexture2D   texture\n"
+  "  #define occTexture3D   texture\n"
   "#else\n"
   "  #define THE_ATTRIBUTE  attribute\n"
   "  #define THE_SHADER_IN  varying\n"
   "  #define THE_SHADER_OUT varying\n"
   "  #define THE_OUT\n"
+  "  #define occTexture1D   texture1D\n"
   "  #define occTexture2D   texture2D\n"
+  "  #define occTexture3D   texture3D\n"
   "#endif\n"
   "\n"
   "#ifdef GL_ES\n"