Missing function pointers for OES_blend_*_seperate

Hi there,





This seems to be related to the issue reported in this forum post:





Problem with glBlendEquationOES





We are seeing the extensions OES_blend_equation_seperate and OES_blend_func_separate being reported as of SDK version 2.06.26, however, both of the follow function pointers are NULL:





glBlendEquationSeparateOES


glBlendFuncSeparateOES





Will these functions also be handled in the next release?





Thanks!





Rob Stepinski


Software Developer


Transgaming Technologies Inc.

The release that has just gone live (2.7) has this issue fixed.

https://www.imgtec.com/powervr/insider/powervr-sdk.asp

The extensions are only available under SGX profiles - please see the documentation for PVRVFrame for how to select these.



I'm using the latest SDK drop but don't manage to get the function pointer for glBlendFuncSeparateOES. Do I miss something?
Please find below some test code and its output.

I already tried different HW profiles like SGX or Generic (using PVRVFrameSetup) but this didn't make a difference.

Regards,
Volker

   {
      char buf[256];
      const char* pszGLVendor = (const char*)glGetString(GL_VENDOR);
      const char* pszGLVersion = (const char*)glGetString(GL_VERSION);
      const char* pszGLRenderer = (const char*)glGetString(GL_RENDERER);
      const char* pszGLExtensions = (const char*)glGetString(GL_EXTENSIONS);

      const char* pszEGLVendor = eglQueryString(eglDisplay, EGL_VENDOR);
      const char* pszEGLVersion = eglQueryString(eglDisplay, EGL_VERSION);
      const char* pszEGLExtensions = eglQueryString(eglDisplay, EGL_EXTENSIONS);

      OutputDebugString("GL_VENDOR:      "); OutputDebugString(pszGLVendor);
      OutputDebugString("GL_VERSION:     "); OutputDebugString(pszGLVersion);
      OutputDebugString("GL_RENDERER:    "); OutputDebugString(pszGLRenderer);
      OutputDebugString("GL_EXTENSIONS:  "); OutputDebugString(pszGLExtensions);
     
      OutputDebugString("EGL_VENDOR:     "); OutputDebugString(pszEGLVendor);   
      OutputDebugString("EGL_VERSION:    "); OutputDebugString(pszEGLVersion);   
      OutputDebugString("EGL_EXTENSIONS: "); OutputDebugString(pszEGLExtensions);

      if (strstr((char *)pszGLExtensions, "GL_OES_blend_func_separate"))
      {
         OutputDebugString("GL_OES_blend_func_separate foundn");

         PFNGLBLENDFUNCSEPARATEOESPROC pglBlendFuncSeparateOES = (PFNGLBLENDFUNCSEPARATEOESPROC)eglGetProcAddress("glBlendFuncSeparateOES");
         const int eglError = eglGetError();

         if (pglBlendFuncSeparateOES == NULL)
            sprintf(buf, "glBlendFuncSeparateOES NOT found - error 0x%04xn", eglError);
         else
            sprintf(buf, "glBlendFuncSeparateOES found - error %d - pointer %pn", eglError, pglBlendFuncSeparateOES);
         OutputDebugString(buf);
      }
      else
         OutputDebugString("GL_OES_blend_func_separate NOT foundn");

      // test same method with other extension pointer:
      if (strstr((char *)pszGLExtensions, "GL_OES_matrix_palette"))
      {
         OutputDebugString("GL_OES_matrix_palette foundn");

         PFNGLCURRENTPALETTEMATRIXOESPROC pglCurrentPaletteMatrixOES = (PFNGLCURRENTPALETTEMATRIXOESPROC)eglGetProcAddress("glCurrentPaletteMatrixOES");
         const int eglError = eglGetError();

         if (pglCurrentPaletteMatrixOES == NULL)
            sprintf(buf, "glCurrentPaletteMatrixOES NOT found - error 0x%04xn", eglError);
         else
            sprintf(buf, "glCurrentPaletteMatrixOES found - error 0x%04x - pointer %pn", eglError, pglCurrentPaletteMatrixOES);
         OutputDebugString(buf);
      }
      else
         OutputDebugString("GL_OES_matrix_palette NOT foundn");
   }


GL_VENDOR:     
PowerVR PVRVFrame 8.1 SGX (Host GL: `ATI Radeon HD 3400 Series`) SDK Build: 2.09.29.0646
GL_VERSION:    
OpenGL ES-CM 1.1
GL_RENDERER:   
PowerVR PVRVFrame 8.1 SGX (Host GL: `ATI Radeon HD 3400 Series`) SDK Build: 2.09.29.0646
GL_EXTENSIONS: 
GL_OES_byte_coordinates GL_OES_fixed_point GL_OES_query_matrix GL_OES_single_precision GL_OES_matrix_get GL_OES_read_format GL_IMG_read_format GL_OES_point_sprite GL_OES_query_matrix GL_OES_texture_env_crossbar GL_OES_texture_mirrored_repeat GL_OES_blend_subtract GL_OES_blend_func_separate GL_OES_blend_equation_separate GL_OES_stencil_wrap GL_OES_extended_matrix_palette GL_OES_vertex_half_float GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_paletted_texture GL_OES_depth24 GL_OES_depth_texture GL_OES_required_internalformat GL_OES_packed_depth_stencil GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_cube_map GL_OES_rgb8_rgba8 GL_OES_stencil8 GL_OES_fragment_precision_high GL_OES_element_index_uint GL_IMG_texture_compression_pvrtc GL_OES_framebuffer_object GL_OES_mapbuffer GL_OES_matrix_palette GL_OES_point_size_array GL_OES_draw_texture GL_EXT_multi_draw_arrays GL_IMG_texture_format_BGRA8888
EGL_VENDOR:    
Imagination Technologies
EGL_VERSION:   
1.4 PVRVFrame 8.1 (SDK 2.09.29.0620)
EGL_EXTENSIONS:


GL_OES_blend_func_separate found
glBlendFuncSeparateOES NOT found - error 0x3000
GL_OES_matrix_palette found
glCurrentPaletteMatrixOES found - error 0x3000 - pointer 02F51830



vpgfx2012-01-26 15:53:09

Hi Volker,





Unfortunately the glBlendFuncSeparateOES extension for OpenGL ES 1.1 is not implemented in the latest version of PVRVFrame. However the identical glBlendFuncSeparate function is supported by the OpenGL ES 2.0 emulation library.





I believe your ATI Radeon HD 3400 should run OpenGL ES 2.0 emulation just fine, so as a workaround you could use the GLESv2 library and call glBlendFuncSeparate for your testing.

Hi Chris,

Thanks for your confirmation! I can’t switch my app to 2.0 right now but actually wanted to do it anyway later on. So far I’ll go on with simple glBlendFunc(). (Would be nice to have the glBlendFuncSeparateOES function in a later PVRVFrame though.)

Thanks,
Volker