From d706560ea2f9986b26ae496805cf69bf463155aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=C2=ADn=20Lucas=20Golini?= Date: Sun, 10 Dec 2017 13:57:32 -0300 Subject: [PATCH] Fixed blend func on OpenGL ES. --HG-- branch : dev --- include/eepp/graphics/renderer/renderer.hpp | 2 ++ src/eepp/graphics/blendmode.cpp | 4 +-- src/eepp/graphics/renderer/renderer.cpp | 28 +++++++++++++++++---- src/eepp/ui/uiwindow.cpp | 2 +- src/test/eetest.cpp | 2 +- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/include/eepp/graphics/renderer/renderer.hpp b/include/eepp/graphics/renderer/renderer.hpp index 28d71fcb2..34c73a925 100644 --- a/include/eepp/graphics/renderer/renderer.hpp +++ b/include/eepp/graphics/renderer/renderer.hpp @@ -93,6 +93,8 @@ class EE_API Renderer { void blendFunc( unsigned int sfactor, unsigned int dfactor ); + void blendFuncSeparate( unsigned int sfactorRGB, unsigned int dfactorRGB, unsigned int sfactorAlpha, unsigned int dfactorAlpha ); + void viewport( int x, int y, int width, int height ); void lineSmooth( const bool& enable ); diff --git a/src/eepp/graphics/blendmode.cpp b/src/eepp/graphics/blendmode.cpp index 15dc65b7f..e1bfb854c 100644 --- a/src/eepp/graphics/blendmode.cpp +++ b/src/eepp/graphics/blendmode.cpp @@ -16,13 +16,13 @@ void BlendMode::setMode( const EE_BLEND_MODE& blend, bool force ) { switch (blend) { case ALPHA_NORMAL: if ( GLi->isExtension( EEGL_EXT_blend_func_separate ) ) - glBlendFuncSeparateEXT( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA ); + GLi->blendFuncSeparate( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA ); else GLi->blendFunc(GL_SRC_ALPHA , GL_ONE_MINUS_SRC_ALPHA); break; case ALPHA_BLENDONE: if ( GLi->isExtension( EEGL_EXT_blend_func_separate ) ) - glBlendFuncSeparateEXT( GL_SRC_ALPHA, GL_ONE, GL_ONE, GL_ONE ); + GLi->blendFuncSeparate( GL_SRC_ALPHA, GL_ONE, GL_ONE, GL_ONE ); else GLi->blendFunc(GL_SRC_ALPHA , GL_ONE); break; diff --git a/src/eepp/graphics/renderer/renderer.cpp b/src/eepp/graphics/renderer/renderer.cpp index 13d613bb7..625f0d9fc 100644 --- a/src/eepp/graphics/renderer/renderer.cpp +++ b/src/eepp/graphics/renderer/renderer.cpp @@ -23,6 +23,7 @@ typedef void (APIENTRY * pglRenderbufferStorage) (GLenum target, GLenum internal typedef void (APIENTRY * pglFramebufferRenderbuffer) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef GLenum (APIENTRY * pglCheckFramebufferStatus) (GLenum target); typedef void (APIENTRY * pglBindRenderbuffer) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRY * pglBlendFuncSeparate) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); Renderer * GLi = NULL; @@ -230,14 +231,21 @@ void Renderer::init() { writeExtension( EEGL_ARB_vertex_array_object , isExtension( "GL_OES_vertex_array_object" ) ); } + if ( !isExtension( EEGL_EXT_blend_func_separate ) ) { + writeExtension( EEGL_EXT_blend_func_separate , isExtension( "GL_OES_blend_func_separate" ) ); + } + #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 ); + if ( GLv_ES2 == version() ) { + 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 ); + writeExtension( EEGL_EXT_blend_func_separate , 1 ); + } #endif #if EE_PLATFORM == EE_PLATFORM_EMSCRIPTEN @@ -471,6 +479,16 @@ void Renderer::blendFunc ( unsigned int sfactor, unsigned int dfactor ) { glBlendFunc( sfactor, dfactor ); } +void Renderer::blendFuncSeparate( unsigned int sfactorRGB, unsigned int dfactorRGB, unsigned int sfactorAlpha, unsigned int dfactorAlpha ) { + static pglBlendFuncSeparate eeglBlendFuncSeparate = NULL; + + if ( NULL == eeglBlendFuncSeparate ) + eeglBlendFuncSeparate = (pglBlendFuncSeparate)getProcAddress( "glBlendFuncSeparate" ); + + if ( NULL != eeglBlendFuncSeparate ) + eeglBlendFuncSeparate( sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha ); +} + void Renderer::setShader( ShaderProgram * Shader ) { #ifdef EE_SHADERS_SUPPORTED if ( NULL != Shader ) { diff --git a/src/eepp/ui/uiwindow.cpp b/src/eepp/ui/uiwindow.cpp index 206708ea9..ca01aa787 100644 --- a/src/eepp/ui/uiwindow.cpp +++ b/src/eepp/ui/uiwindow.cpp @@ -1057,7 +1057,7 @@ void UIWindow::setTitle( const String& text ) { } mTitle->setEnabled( false ); - mTitle->setVisible( true ); + mTitle->setVisible( !( mStyleConfig.WinFlags & UI_WIN_NO_BORDER ) ); } fixTitleSize(); diff --git a/src/test/eetest.cpp b/src/test/eetest.cpp index 95faaf3e1..cdda54702 100644 --- a/src/test/eetest.cpp +++ b/src/test/eetest.cpp @@ -950,7 +950,7 @@ void EETest::createDecoratedWindow() { if ( "Hide Border" == txt ) { win->setWinFlags( win->getWinFlags() | UI_WIN_NO_BORDER ); menuItem->setText( "Show Border" ); - } else if ( "Show Border" ) { + } else if ( "Show Border" == txt ) { win->setWinFlags( win->getWinFlags() & ~UI_WIN_NO_BORDER ); menuItem->setText( "Hide Border" ); } else if ( "Close" == txt ) {