bool cGL::ShadersSupported() { #ifdef EE_GLES return ( GLv_ES2 == Version() || GLv_3 == Version() || GLv_3CP == Version() ); #else return IsExtension( EEGL_ARB_shader_objects ) && IsExtension( EEGL_ARB_vertex_shader ) && IsExtension( EEGL_ARB_fragment_shader ); #endif }
bool cGL::PointSpriteSupported() { #ifdef EE_GLES return true; #else return IsExtension( EEGL_ARB_point_sprite ); #endif }
int Utils::findExtension(const std::vector<CString>& filter, const CString& strExt) { int index = -1; for (int i=1; i < filter.size(); i+=2) { if (IsExtension(filter[i], strExt)) { index = i; break; } } return index; }
CString Utils::getFileName(const std::vector<CString>& filter, int& typeIndex, CString fileName) { const int index = (typeIndex - 1) * 2 + 1; const CString strExtension(GetExtension(fileName)); const int extensionIndex = findExtension(filter, strExtension); if (index < filter.size()) { if (extensionIndex == -1) { setExtension(fileName, GetExtension(filter[index])); } else if (!IsExtension(filter[index], strExtension)) { typeIndex = extensionIndex / 2 + 1; } } return fileName; }
void cGL::Init() { #ifdef EE_GLEW_AVAILABLE glewExperimental = 1; bool glewOn = ( GLEW_OK == glewInit() ); if ( glewOn ) { WriteExtension( EEGL_ARB_texture_non_power_of_two , GLEW_ARB_texture_non_power_of_two ); WriteExtension( EEGL_ARB_point_parameters , GLEW_ARB_point_parameters ); WriteExtension( EEGL_ARB_point_sprite , GLEW_ARB_point_sprite ); WriteExtension( EEGL_ARB_shading_language_100 , GLEW_ARB_shading_language_100 ); WriteExtension( EEGL_ARB_shader_objects , GLEW_ARB_shader_objects ); WriteExtension( EEGL_ARB_vertex_shader , GLEW_ARB_vertex_shader ); WriteExtension( EEGL_ARB_fragment_shader , GLEW_ARB_fragment_shader ); WriteExtension( EEGL_EXT_framebuffer_object , GLEW_EXT_framebuffer_object ); WriteExtension( EEGL_ARB_multitexture , GLEW_ARB_multitexture ); WriteExtension( EEGL_EXT_texture_compression_s3tc , GLEW_EXT_texture_compression_s3tc ); WriteExtension( EEGL_ARB_vertex_buffer_object , GLEW_ARB_vertex_buffer_object ); WriteExtension( EEGL_ARB_pixel_buffer_object , GLEW_ARB_pixel_buffer_object ); WriteExtension( EEGL_ARB_vertex_array_object , GLEW_ARB_vertex_array_object ); WriteExtension( EEGL_EXT_blend_func_separate , GLEW_EXT_blend_func_separate ); } else #endif { WriteExtension( EEGL_ARB_texture_non_power_of_two , IsExtension( "GL_ARB_texture_non_power_of_two" ) ); WriteExtension( EEGL_ARB_point_parameters , IsExtension( "GL_ARB_point_parameters" ) ); WriteExtension( EEGL_ARB_point_sprite , IsExtension( "GL_ARB_point_sprite" ) ); WriteExtension( EEGL_ARB_shading_language_100 , IsExtension( "GL_ARB_shading_language_100" ) ); WriteExtension( EEGL_ARB_shader_objects , IsExtension( "GL_ARB_shader_objects" ) ); WriteExtension( EEGL_ARB_vertex_shader , IsExtension( "GL_ARB_vertex_shader" ) ); WriteExtension( EEGL_ARB_fragment_shader , IsExtension( "GL_ARB_fragment_shader" ) ); WriteExtension( EEGL_EXT_framebuffer_object , IsExtension( "GL_EXT_framebuffer_object" ) ); WriteExtension( EEGL_ARB_multitexture , IsExtension( "GL_ARB_multitexture" ) ); WriteExtension( EEGL_EXT_texture_compression_s3tc , IsExtension( "GL_EXT_texture_compression_s3tc" ) ); WriteExtension( EEGL_ARB_vertex_buffer_object , IsExtension( "GL_ARB_vertex_buffer_object" ) ); WriteExtension( EEGL_ARB_pixel_buffer_object , IsExtension( "GL_ARB_pixel_buffer_object" ) ); WriteExtension( EEGL_ARB_vertex_array_object , IsExtension( "GL_ARB_vertex_array_object" ) ); WriteExtension( EEGL_EXT_blend_func_separate , IsExtension( "GL_EXT_blend_func_separate" ) ); } // NVIDIA added support for GL_OES_compressed_ETC1_RGB8_texture in desktop GPUs // GLEW doesn't return the correct result WriteExtension( EEGL_OES_compressed_ETC1_RGB8_texture , SOIL_GL_ExtensionSupported( "GL_OES_compressed_ETC1_RGB8_texture" ) ); #ifdef EE_GLES WriteExtension( EEGL_ARB_point_parameters , 1 ); WriteExtension( EEGL_ARB_point_sprite , 1 ); WriteExtension( EEGL_ARB_multitexture , 1 ); WriteExtension( EEGL_IMG_texture_compression_pvrtc , IsExtension( "GL_IMG_texture_compression_pvrtc" ) ); if ( !IsExtension( EEGL_EXT_texture_compression_s3tc ) ) { WriteExtension( EEGL_EXT_texture_compression_s3tc , IsExtension( "GL_OES_texture_compression_S3TC" ) ); } if ( !IsExtension( EEGL_EXT_framebuffer_object ) ) { WriteExtension( EEGL_EXT_framebuffer_object , IsExtension( "GL_OES_framebuffer_object" ) ); } if ( !IsExtension( EEGL_ARB_texture_non_power_of_two ) ) { WriteExtension( EEGL_ARB_texture_non_power_of_two , IsExtension( "GL_IMG_texture_npot" ) || IsExtension( "GL_OES_texture_npot" ) || IsExtension( "GL_APPLE_texture_2D_limited_npot" ) ); } if ( !IsExtension( EEGL_ARB_vertex_array_object ) ) { WriteExtension( EEGL_ARB_vertex_array_object , IsExtension( "GL_OES_vertex_array_object" ) ); } #endif #ifdef EE_GLES2 WriteExtension( EEGL_EXT_framebuffer_object , 1 ); WriteExtension( EEGL_ARB_vertex_buffer_object , 1 ); WriteExtension( EEGL_ARB_shader_objects , 1 ); WriteExtension( EEGL_ARB_vertex_shader , 1 ); WriteExtension( EEGL_ARB_fragment_shader , 1 ); #endif #if EE_PLATFORM == EE_PLATFORM_EMSCRIPTEN if ( !IsExtension( EEGL_EXT_texture_compression_s3tc ) ) { WriteExtension( EEGL_EXT_texture_compression_s3tc , IsExtension( "WEBGL_compressed_texture_s3tc" ) || IsExtension( "WEBKIT_WEBGL_compressed_texture_s3tc" ) || IsExtension( "MOZ_WEBGL_compressed_texture_s3tc" ) ); } #endif }
bool Utils::IsExtensionRdf(const CString& strFile) { return IsExtension(strFile, cRdf); }
bool Utils::IsExtensionBdt(const CString& strFile) { return IsExtension(strFile, cBdt); }
bool Utils::IsExtensionHtml(const CString& strFile) { return IsExtension(strFile, cHtml) || IsExtension(strFile, cHtm); }
bool Utils::IsExtensionRenjs(const CString& strFile) { return IsExtension(strFile, cRenjs) || IsExtension(strFile, cRen); }
bool Utils::IsExtensionPos(const CString& strFile) { return IsExtension(strFile, cPos); }
bool Utils::IsExtensionWzq(const CString& strFile) { return IsExtension(strFile, cWzq); }
bool Utils::IsExtensionLib(const CString& strFile) { return IsExtension(strFile, cLib); }