]> OCCT Git - occt-copy.git/commitdiff
0028734: Visualization, OpenGl_Texture - fix initialization of 1D texture
authorisk <isk@opencascade.com>
Thu, 14 Apr 2016 09:04:54 +0000 (12:04 +0300)
committerkgv <kgv@opencascade.com>
Sat, 17 Mar 2018 09:55:05 +0000 (12:55 +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 3b03c64bbca249bf7301757f1b4e1c26c7aecdfd..0603ce5d1d02b31e67d9a4ee6f686590086eff26 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 716eed8126856cf81dd613f1bfdc049fffd8bc01..001565ef6ac4a48c5b38f96f4d9647f37240cedd 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 d2d9191fbfc6cf163acb80ff4a36279b15ece2b5..7476af29740173fe0a899640d91852965472c6b3 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"