Platform3DObject Extensions3DOpenGL::createVertexArrayOES() { m_context->makeContextCurrent(); GLuint array = 0; #if (PLATFORM(GTK) || PLATFORM(EFL)) || PLATFORM(WIN) if (isVertexArrayObjectSupported()) glGenVertexArrays(1, &array); #elif PLATFORM(QT) #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) if (isVertexArrayObjectSupported()) m_vaoFunctions->glGenVertexArrays(1, &array); #endif #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object glGenVertexArraysAPPLE(1, &array); #endif return array; }
void Extensions3DOpenGL::bindVertexArrayOES(Platform3DObject array) { m_context->makeContextCurrent(); #if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN)) if (isVertexArrayObjectSupported()) glBindVertexArray(array); #elif PLATFORM(QT) #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) if (isVertexArrayObjectSupported()) m_vaoFunctions->glBindVertexArray(array); #endif #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object glBindVertexArrayAPPLE(array); #else UNUSED_PARAM(array); #endif }
void Extensions3DOpenGL::deleteVertexArrayOES(Platform3DObject array) { if (!array) return; m_context->makeContextCurrent(); #if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN)) if (isVertexArrayObjectSupported()) glDeleteVertexArrays(1, &array); #elif PLATFORM(QT) #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) if (isVertexArrayObjectSupported()) m_vaoFunctions->glDeleteVertexArrays(1, &array); #endif #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object glDeleteVertexArraysAPPLE(1, &array); #endif }
Platform3DObject Extensions3DOpenGL::createVertexArrayOES() { m_context->makeContextCurrent(); GLuint array = 0; #if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN) || PLATFORM(NIX) || PLATFORM(JS)) if (isVertexArrayObjectSupported()) glGenVertexArrays(1, &array); #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object glGenVertexArraysAPPLE(1, &array); #endif return array; }
void Extensions3DOpenGL::bindVertexArrayOES(Platform3DObject array) { m_context->makeContextCurrent(); #if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN) || PLATFORM(IOS)) if (isVertexArrayObjectSupported()) glBindVertexArray(array); #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object glBindVertexArrayAPPLE(array); #else UNUSED_PARAM(array); #endif }
GC3Dboolean Extensions3DOpenGL::isVertexArrayOES(Platform3DObject array) { if (!array) return GL_FALSE; m_context->makeContextCurrent(); #if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN)) if (isVertexArrayObjectSupported()) return glIsVertexArray(array); #elif PLATFORM(QT) #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) if (isVertexArrayObjectSupported()) return m_vaoFunctions->glIsVertexArray(array); #endif #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object return glIsVertexArrayAPPLE(array); #endif m_context->synthesizeGLError(GL_INVALID_OPERATION); return GL_FALSE; }
void Extensions3DOpenGL::deleteVertexArrayOES(Platform3DObject array) { if (!array) return; m_context->makeContextCurrent(); #if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN) || PLATFORM(NIX) || PLATFORM(JS)) if (isVertexArrayObjectSupported()) glDeleteVertexArrays(1, &array); #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object glDeleteVertexArraysAPPLE(1, &array); #endif }
GC3Dboolean Extensions3DOpenGL::isVertexArrayOES(Platform3DObject array) { if (!array) return GL_FALSE; m_context->makeContextCurrent(); #if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN) || PLATFORM(NIX) || PLATFORM(JS)) if (isVertexArrayObjectSupported()) return glIsVertexArray(array); #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object return glIsVertexArrayAPPLE(array); #endif return GL_FALSE; }
bool Extensions3DOpenGL::supportsExtension(const String& name) { // GL_ANGLE_framebuffer_blit and GL_ANGLE_framebuffer_multisample are "fake". They are implemented using other // extensions. In particular GL_EXT_framebuffer_blit and GL_EXT_framebuffer_multisample #if PLATFORM(QT) if (name == "GL_ANGLE_framebuffer_blit" || name == "GL_EXT_framebuffer_blit") return m_context->m_functions->hasOpenGLExtension(QOpenGLExtensions::FramebufferBlit); if (name == "GL_ANGLE_framebuffer_multisample" || name == "GL_EXT_framebuffer_multisample") return m_context->m_functions->hasOpenGLExtension(QOpenGLExtensions::FramebufferMultisample); if (name == "GL_OES_texture_npot" || name == "GL_ARB_texture_non_power_of_two") return m_context->m_functions->hasOpenGLFeature(QOpenGLFunctions::NPOTTextures); if (name == "GL_OES_packed_depth_stencil" || name == "GL_EXT_packed_depth_stencil") return m_context->m_functions->hasOpenGLExtension(QOpenGLExtensions::PackedDepthStencil); // FIXME: We don't have the robustness methods from Extensions3DOpenGLES. if (name == "GL_EXT_robustness") return false; #else if (name == "GL_ANGLE_framebuffer_blit") return m_availableExtensions.contains("GL_EXT_framebuffer_blit"); if (name == "GL_ANGLE_framebuffer_multisample") return m_availableExtensions.contains("GL_EXT_framebuffer_multisample"); #endif // GL_OES_vertex_array_object if (name == "GL_OES_vertex_array_object") { #if (PLATFORM(GTK) || PLATFORM(EFL)) return m_availableExtensions.contains("GL_ARB_vertex_array_object"); #elif PLATFORM(QT) return isVertexArrayObjectSupported(); #else return m_availableExtensions.contains("GL_APPLE_vertex_array_object"); #endif } if (!m_context->isGLES2Compliant()) { // Desktop GL always supports GL_OES_rgb8_rgba8. if (name == "GL_OES_rgb8_rgba8") return true; // If GL_ARB_texture_float is available then we report GL_OES_texture_float and // GL_OES_texture_half_float as available. if (name == "GL_OES_texture_float" || name == "GL_OES_texture_half_float") return m_availableExtensions.contains("GL_ARB_texture_float"); // Desktop GL always supports the standard derivative functions if (name == "GL_OES_standard_derivatives") return true; // Desktop GL always supports UNSIGNED_INT indices if (name == "GL_OES_element_index_uint") return true; } if (name == "GL_EXT_draw_buffers") { #if PLATFORM(MAC) return m_availableExtensions.contains("GL_ARB_draw_buffers"); #else // FIXME: implement support for other platforms. return false; #endif } return m_availableExtensions.contains(name); }