1/* 2 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2012 Research In Motion Limited. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 19 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#ifndef Extensions3DOpenGLES_h 28#define Extensions3DOpenGLES_h 29 30#include "Extensions3DOpenGLCommon.h" 31 32#include <GLES2/gl2.h> 33#include <GLES2/gl2ext.h> 34 35#ifndef GL_EXT_robustness 36/* reuse GL_NO_ERROR */ 37#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 38#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 39#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 40#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 41#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 42#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 43#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 44#endif 45 46#ifndef GL_EXT_robustness 47#define GL_EXT_robustness 1 48#ifdef GL_GLEXT_PROTOTYPES 49GL_APICALL GC3Denum GL_APIENTRY glGetGraphicsResetStatusEXT(void); 50GL_APICALL void GL_APIENTRY glReadnPixelsEXT(GLint x, GLint y, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, GC3Dsizei bufSize, void *data); 51GL_APICALL void GL_APIENTRY glGetnUniformfvEXT(GLuint program, GLint location, GC3Dsizei bufSize, float *params); 52GL_APICALL void GL_APIENTRY glGetnUniformivEXT(GLuint program, GLint location, GC3Dsizei bufSize, GLint *params); 53#endif 54typedef GC3Denum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); 55typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, GC3Dsizei bufSize, void *data); 56typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GC3Dsizei bufSize, float *params); 57typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GC3Dsizei bufSize, GLint *params); 58#endif 59 60namespace WebCore { 61 62class Extensions3DOpenGLES : public Extensions3DOpenGLCommon { 63public: 64 virtual ~Extensions3DOpenGLES(); 65 66 virtual void framebufferTexture2DMultisampleIMG(unsigned long target, unsigned long attachment, unsigned long textarget, unsigned int texture, int level, unsigned long samples); 67 virtual void renderbufferStorageMultisampleIMG(unsigned long target, unsigned long samples, unsigned long internalformat, unsigned long width, unsigned long height); 68 69 // Extension3D methods 70 virtual void blitFramebuffer(long srcX0, long srcY0, long srcX1, long srcY1, long dstX0, long dstY0, long dstX1, long dstY1, unsigned long mask, unsigned long filter); 71 virtual void renderbufferStorageMultisample(unsigned long target, unsigned long samples, unsigned long internalformat, unsigned long width, unsigned long height); 72 virtual void insertEventMarkerEXT(const String&); 73 virtual void pushGroupMarkerEXT(const String&); 74 virtual void popGroupMarkerEXT(void); 75 76 virtual Platform3DObject createVertexArrayOES(); 77 virtual void deleteVertexArrayOES(Platform3DObject); 78 virtual GC3Dboolean isVertexArrayOES(Platform3DObject); 79 virtual void bindVertexArrayOES(Platform3DObject); 80 virtual void drawBuffersEXT(GC3Dsizei, const GC3Denum*); 81 82 virtual void drawArraysInstanced(GC3Denum mode, GC3Dint first, GC3Dsizei count, GC3Dsizei primcount); 83 virtual void drawElementsInstanced(GC3Denum mode, GC3Dsizei count, GC3Denum type, long long offset, GC3Dsizei primcount); 84 virtual void vertexAttribDivisor(GC3Duint index, GC3Duint divisor); 85 86 // EXT Robustness - reset 87 virtual int getGraphicsResetStatusARB(); 88 void setEXTContextLostCallback(std::unique_ptr<GraphicsContext3D::ContextLostCallback>); 89 90 // EXT Robustness - etc 91 virtual void readnPixelsEXT(int x, int y, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, GC3Dsizei bufSize, void *data); 92 virtual void getnUniformfvEXT(GC3Duint program, int location, GC3Dsizei bufSize, float *params); 93 virtual void getnUniformivEXT(GC3Duint program, int location, GC3Dsizei bufSize, int *params); 94 95protected: 96 // This class only needs to be instantiated by GraphicsContext3D implementations. 97 friend class GraphicsContext3D; 98 Extensions3DOpenGLES(GraphicsContext3D*); 99 100 virtual bool supportsExtension(const String&); 101 virtual String getExtensions(); 102 103 GC3Denum m_contextResetStatus; 104 105 bool m_supportsOESvertexArrayObject; 106 bool m_supportsIMGMultisampledRenderToTexture; 107 bool m_supportsANGLEinstancedArrays; 108 109 PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC m_glFramebufferTexture2DMultisampleIMG; 110 PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC m_glRenderbufferStorageMultisampleIMG; 111 PFNGLBINDVERTEXARRAYOESPROC m_glBindVertexArrayOES; 112 PFNGLDELETEVERTEXARRAYSOESPROC m_glDeleteVertexArraysOES; 113 PFNGLGENVERTEXARRAYSOESPROC m_glGenVertexArraysOES; 114 PFNGLISVERTEXARRAYOESPROC m_glIsVertexArrayOES; 115 PFNGLGETGRAPHICSRESETSTATUSEXTPROC m_glGetGraphicsResetStatusEXT; 116 PFNGLREADNPIXELSEXTPROC m_glReadnPixelsEXT; 117 PFNGLGETNUNIFORMFVEXTPROC m_glGetnUniformfvEXT; 118 PFNGLGETNUNIFORMIVEXTPROC m_glGetnUniformivEXT; 119 PFNGLVERTEXATTRIBDIVISORANGLEPROC m_glVertexAttribDivisorANGLE; 120 PFNGLDRAWARRAYSINSTANCEDANGLEPROC m_glDrawArraysInstancedANGLE; 121 PFNGLDRAWELEMENTSINSTANCEDANGLEPROC m_glDrawElementsInstancedANGLE; 122 123 std::unique_ptr<GraphicsContext3D::ContextLostCallback> m_contextLostCallback; 124}; 125 126} // namespace WebCore 127 128#endif // Extensions3DOpenGLES_h 129