mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-21 10:13:43 +03:00
0032465: Visualization, TKOpenGles - invalid enum on GL_RGBA16F initialization in Edge 92
GL_HALF_FLOAT_OES from OpenGL ES 2.0 extension is now avoided within OpenGL ES 3.0+ context in favor of GL_HALF_FLOAT. emscripten_webgl_enable_extension() is now called for all extensions checked by OpenGl_Context::CheckExtension(). So far this doesn't solve any problem, but looks more logical and provisional.
This commit is contained in:
parent
16222b8cd2
commit
0770d850d6
@ -74,25 +74,6 @@ IMPLEMENT_STANDARD_RTTIEXT(OpenGl_Context,Standard_Transient)
|
|||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
#include <emscripten.h>
|
#include <emscripten.h>
|
||||||
#include <emscripten/html5.h>
|
#include <emscripten/html5.h>
|
||||||
|
|
||||||
//! Check if WebGL extension is available and activate it
|
|
||||||
//! (usage of extension without activation will generate errors).
|
|
||||||
static bool checkEnableWebGlExtension (const OpenGl_Context& theCtx,
|
|
||||||
const char* theExtName)
|
|
||||||
{
|
|
||||||
if (!theCtx.CheckExtension (theExtName))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (EMSCRIPTEN_WEBGL_CONTEXT_HANDLE aWebGlCtx = emscripten_webgl_get_current_context())
|
|
||||||
{
|
|
||||||
if (emscripten_webgl_enable_extension (aWebGlCtx, theExtName))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
@ -892,7 +873,25 @@ Standard_Boolean OpenGl_Context::CheckExtension (const char* theExtName) const
|
|||||||
Messenger()->Send ("TKOpenGL: glGetString (GL_EXTENSIONS) has returned NULL! No GL context?", Message_Warning);
|
Messenger()->Send ("TKOpenGL: glGetString (GL_EXTENSIONS) has returned NULL! No GL context?", Message_Warning);
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
return CheckExtension (anExtString, theExtName);
|
if (!CheckExtension (anExtString, theExtName))
|
||||||
|
{
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
//! Check if WebGL extension is available and activate it
|
||||||
|
//! (usage of extension without activation will generate errors).
|
||||||
|
if (EMSCRIPTEN_WEBGL_CONTEXT_HANDLE aWebGlCtx = emscripten_webgl_get_current_context())
|
||||||
|
{
|
||||||
|
if (emscripten_webgl_enable_extension (aWebGlCtx, theExtName))
|
||||||
|
{
|
||||||
|
return Standard_True;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Standard_False;
|
||||||
|
#else
|
||||||
|
return Standard_True;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// =======================================================================
|
// =======================================================================
|
||||||
@ -1700,14 +1699,14 @@ void OpenGl_Context::init (const Standard_Boolean theIsCoreProfile)
|
|||||||
mySupportedFormats->Add (Image_Format_AlphaF);
|
mySupportedFormats->Add (Image_Format_AlphaF);
|
||||||
mySupportedFormats->Add (Image_Format_RGBF);
|
mySupportedFormats->Add (Image_Format_RGBF);
|
||||||
mySupportedFormats->Add (Image_Format_RGBAF);
|
mySupportedFormats->Add (Image_Format_RGBAF);
|
||||||
if (hasHalfFloatBuffer)
|
if (hasHalfFloatBuffer != OpenGl_FeatureNotAvailable)
|
||||||
{
|
{
|
||||||
mySupportedFormats->Add (Image_Format_RGBAF_half);
|
mySupportedFormats->Add (Image_Format_RGBAF_half);
|
||||||
}
|
}
|
||||||
if (arbTexRG)
|
if (arbTexRG)
|
||||||
{
|
{
|
||||||
mySupportedFormats->Add (Image_Format_RGF);
|
mySupportedFormats->Add (Image_Format_RGF);
|
||||||
if (hasHalfFloatBuffer)
|
if (hasHalfFloatBuffer != OpenGl_FeatureNotAvailable)
|
||||||
{
|
{
|
||||||
mySupportedFormats->Add (Image_Format_RGF_half);
|
mySupportedFormats->Add (Image_Format_RGF_half);
|
||||||
}
|
}
|
||||||
@ -1722,7 +1721,7 @@ void OpenGl_Context::init (const Standard_Boolean theIsCoreProfile)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
if (checkEnableWebGlExtension (*this, "GL_WEBGL_compressed_texture_s3tc")) // GL_WEBGL_compressed_texture_s3tc_srgb for sRGB formats
|
if (CheckExtension ("GL_WEBGL_compressed_texture_s3tc")) // GL_WEBGL_compressed_texture_s3tc_srgb for sRGB formats
|
||||||
{
|
{
|
||||||
mySupportedFormats->Add (Image_CompressedFormat_RGB_S3TC_DXT1);
|
mySupportedFormats->Add (Image_CompressedFormat_RGB_S3TC_DXT1);
|
||||||
mySupportedFormats->Add (Image_CompressedFormat_RGBA_S3TC_DXT1);
|
mySupportedFormats->Add (Image_CompressedFormat_RGBA_S3TC_DXT1);
|
||||||
@ -1730,7 +1729,7 @@ void OpenGl_Context::init (const Standard_Boolean theIsCoreProfile)
|
|||||||
mySupportedFormats->Add (Image_CompressedFormat_RGBA_S3TC_DXT5);
|
mySupportedFormats->Add (Image_CompressedFormat_RGBA_S3TC_DXT5);
|
||||||
}
|
}
|
||||||
if (!extPDS
|
if (!extPDS
|
||||||
&& checkEnableWebGlExtension (*this, "GL_WEBGL_depth_texture"))
|
&& CheckExtension ("GL_WEBGL_depth_texture"))
|
||||||
{
|
{
|
||||||
extPDS = true; // WebGL 1.0 extension (in WebGL 2.0 core)
|
extPDS = true; // WebGL 1.0 extension (in WebGL 2.0 core)
|
||||||
}
|
}
|
||||||
@ -2012,7 +2011,7 @@ void OpenGl_Context::DiagnosticInformation (TColStd_IndexedDataMapOfStringString
|
|||||||
addInfo (theDict, "GLvendor", (const char*)::glGetString (GL_VENDOR));
|
addInfo (theDict, "GLvendor", (const char*)::glGetString (GL_VENDOR));
|
||||||
addInfo (theDict, "GLdevice", (const char*)::glGetString (GL_RENDERER));
|
addInfo (theDict, "GLdevice", (const char*)::glGetString (GL_RENDERER));
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
if (checkEnableWebGlExtension (*this, "GL_WEBGL_debug_renderer_info"))
|
if (CheckExtension ("GL_WEBGL_debug_renderer_info"))
|
||||||
{
|
{
|
||||||
if (const char* aVendor = (const char*)::glGetString (0x9245))
|
if (const char* aVendor = (const char*)::glGetString (0x9245))
|
||||||
{
|
{
|
||||||
|
@ -455,12 +455,25 @@ void OpenGl_GlFunctions::load (OpenGl_Context& theCtx,
|
|||||||
theCtx.hasDrawBuffers = OpenGl_FeatureInExtensions;
|
theCtx.hasDrawBuffers = OpenGl_FeatureInExtensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
theCtx.hasFloatBuffer = isGlGreaterEqualShort (3, 2) ? OpenGl_FeatureInCore :
|
// float textures available since OpenGL ES 3.0+,
|
||||||
checkExtensionShort ("GL_EXT_color_buffer_float") ? OpenGl_FeatureInExtensions
|
// but renderable only since 3.2+ or with extension
|
||||||
: OpenGl_FeatureNotAvailable;
|
theCtx.hasFloatBuffer = theCtx.hasHalfFloatBuffer = OpenGl_FeatureNotAvailable;
|
||||||
theCtx.hasHalfFloatBuffer = isGlGreaterEqualShort (3, 2) ? OpenGl_FeatureInCore :
|
if (isGlGreaterEqualShort (3, 2))
|
||||||
checkExtensionShort ("GL_EXT_color_buffer_half_float") ? OpenGl_FeatureInExtensions
|
{
|
||||||
: OpenGl_FeatureNotAvailable;
|
theCtx.hasFloatBuffer = theCtx.hasHalfFloatBuffer = OpenGl_FeatureInCore;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (checkExtensionShort ("GL_EXT_color_buffer_float"))
|
||||||
|
{
|
||||||
|
theCtx.hasFloatBuffer = isGlGreaterEqualShort (3, 0) ? OpenGl_FeatureInCore : OpenGl_FeatureInExtensions;
|
||||||
|
}
|
||||||
|
if (checkExtensionShort ("GL_EXT_color_buffer_half_float"))
|
||||||
|
{
|
||||||
|
// GL_HALF_FLOAT_OES for OpenGL ES 2.0 and GL_HALF_FLOAT for OpenGL ES 3.0+
|
||||||
|
theCtx.hasHalfFloatBuffer = isGlGreaterEqualShort (3, 0) ? OpenGl_FeatureInCore : OpenGl_FeatureInExtensions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
theCtx.oesSampleVariables = checkExtensionShort ("GL_OES_sample_variables");
|
theCtx.oesSampleVariables = checkExtensionShort ("GL_OES_sample_variables");
|
||||||
theCtx.oesStdDerivatives = checkExtensionShort ("GL_OES_standard_derivatives");
|
theCtx.oesStdDerivatives = checkExtensionShort ("GL_OES_standard_derivatives");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user