GrGLCreateNativeInterface_iOS.cpp revision 6fb736fc2ea5f3f7ac44494211cc6755180ca192
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com */ 8bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 10bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com#include "GrGLInterface.h" 11bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com 12bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com#import <OpenGLES/ES1/gl.h> 13bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com#import <OpenGLES/ES1/glext.h> 14bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com 15bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com#import <OpenGLES/ES2/gl.h> 16bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com#import <OpenGLES/ES2/glext.h> 17bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com 186fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.comconst GrGLInterface* GrGLDefaultInterface() { 196fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com static SkAutoTUnref<GrGLInterface> glInterface; 206fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com if (!glInterface.get()) { 216fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com GrGLInteface* interface = new GrGLInterface; 226fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com glInterface.reset(interface); 230b77d6892b067ad402c9678b0226bff70599fbe2bsalomon@google.com 246fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fNPOTRenderTargetSupport = kProbe_GrGLCapability; 256fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fMinRenderTargetHeight = kProbe_GrGLCapability; 266fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fMinRenderTargetWidth = kProbe_GrGLCapability; 276fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fActiveTexture = glActiveTexture; 286fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fAttachShader = glAttachShader; 296fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBindAttribLocation = glBindAttribLocation; 306fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBindBuffer = glBindBuffer; 316fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBindTexture = glBindTexture; 326fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBlendColor = glBlendColor; 336fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBlendFunc = glBlendFunc; 346fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBufferData = (GrGLBufferDataProc)glBufferData; 356fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBufferSubData = (GrGLBufferSubDataProc)glBufferSubData; 366fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fClear = glClear; 376fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fClearColor = glClearColor; 386fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fClearStencil = glClearStencil; 396fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fClientActiveTexture = glClientActiveTexture; 406fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fColorMask = glColorMask; 416fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fColorPointer = glColorPointer; 426fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fColor4ub = glColor4ub; 436fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fCompileShader = glCompileShader; 446fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fCompressedTexImage2D = glCompressedTexImage2D; 456fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fCreateProgram = glCreateProgram; 466fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fCreateShader = glCreateShader; 476fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fCullFace = glCullFace; 486fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDeleteBuffers = glDeleteBuffers; 496fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDeleteProgram = glDeleteProgram; 506fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDeleteShader = glDeleteShader; 516fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDeleteTextures = glDeleteTextures; 526fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDepthMask = glDepthMask; 536fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDisable = glDisable; 546fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDisableClientState = glDisableClientState; 556fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDisableVertexAttribArray = glDisableVertexAttribArray; 566fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDrawArrays = glDrawArrays; 576fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDrawBuffer = NULL; 586fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDrawBuffers = NULL; 596fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDrawElements = glDrawElements; 606fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fEnable = glEnable; 616fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fEnableClientState = glEnableClientState; 626fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fEnableVertexAttribArray = glEnableVertexAttribArray; 636fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fFrontFace = glFrontFace; 646fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGenBuffers = glGenBuffers; 656fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetBufferParameteriv = glGetBufferParameteriv; 666fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetError = glGetError; 676fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetIntegerv = glGetIntegerv; 686fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetProgramInfoLog = glGetProgramInfoLog; 696fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetProgramiv = glGetProgramiv; 706fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetShaderInfoLog = glGetShaderInfoLog; 716fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetShaderiv = glGetShaderiv; 726fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetString = glGetString; 736fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGenTextures = glGenTextures; 746fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetUniformLocation = glGetUniformLocation; 756fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fLineWidth = glLineWidth; 766fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fLinkProgram = glLinkProgram; 776fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fLoadMatrixf = glLoadMatrixf; 786fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fMatrixMode = glMatrixMode; 796fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fPointSize = glPointSize; 806fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fPixelStorei = glPixelStorei; 816fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fReadBuffer = NULL; 826fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fReadPixels = glReadPixels; 836fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fScissor = glScissor; 846fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fShadeModel = glShadeModel; 856fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fShaderSource = glShaderSource; 866fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fStencilFunc = glStencilFunc; 876fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fStencilFuncSeparate = glStencilFuncSeparate; 886fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fStencilMask = glStencilMask; 896fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fStencilMaskSeparate = glStencilMaskSeparate; 906fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fStencilOp = glStencilOp; 916fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fStencilOpSeparate = glStencilOpSeparate; 926fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fTexCoordPointer = glTexCoordPointer; 936fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fTexEnvi = glTexEnvi; 946fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com // mac uses GLenum for internalFormat param (non-standard) 956fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com // amounts to int vs. uint. 966fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fTexImage2D = (GrGLTexImage2DProc)glTexImage2D; 976fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fTexParameteri = glTexParameteri; 986fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fTexSubImage2D = glTexSubImage2D; 996fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform1f = glUniform1f; 1006fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform1i = glUniform1i; 1016fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform1fv = glUniform1fv; 1026fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform1iv = glUniform1iv; 1036fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform2f = glUniform2f; 1046fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform2i = glUniform2i; 1056fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform2fv = glUniform2fv; 1066fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform2iv = glUniform2iv; 1076fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform3f = glUniform3f; 1086fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform3i = glUniform3i; 1096fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform3fv = glUniform3fv; 1106fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform3iv = glUniform3iv; 1116fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform4f = glUniform4f; 1126fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform4i = glUniform4i; 1136fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform4fv = glUniform4fv; 1146fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform4iv = glUniform4iv; 1156fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniform4fv = glUniform4fv; 1166fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniformMatrix2fv = glUniformMatrix2fv; 1176fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniformMatrix3fv = glUniformMatrix3fv; 1186fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUniformMatrix4fv = glUniformMatrix4fv; 1196fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUseProgram = glUseProgram; 1206fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fVertexAttrib4fv = glVertexAttrib4fv; 1216fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fVertexAttribPointer = glVertexAttribPointer; 1226fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fVertexPointer = glVertexPointer; 1236fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fViewport = glViewport; 1246fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGenFramebuffers = glGenFramebuffers; 1256fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv; 1266fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv; 1276fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBindFramebuffer = glBindFramebuffer; 1286fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fFramebufferTexture2D = glFramebufferTexture2D; 1296fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fCheckFramebufferStatus = glCheckFramebufferStatus; 1306fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDeleteFramebuffers = glDeleteFramebuffers; 1316fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fRenderbufferStorage = glRenderbufferStorage; 1326fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fGenRenderbuffers = glGenRenderbuffers; 1336fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fDeleteRenderbuffers = glDeleteRenderbuffers; 1346fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fFramebufferRenderbuffer = glFramebufferRenderbuffer; 1356fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBindRenderbuffer = glBindRenderbuffer; 136bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com 1376fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com #if GL_OES_mapbuffer 1386fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fMapBuffer = glMapBufferOES; 1396fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fUnmapBuffer = glUnmapBufferOES; 1406fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com #endif 141bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com 1426fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com #if GL_APPLE_framebuffer_multisample 1436fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fRenderbufferStorageMultisample = glRenderbufferStorageMultisampleAPPLE; 1446fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fResolveMultisampleFramebuffer = glResolveMultisampleFramebufferAPPLE; 1456fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com #endif 1466fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBindFragDataLocationIndexed = NULL; 147bd3e3202ad5111a8a259e976594d7e6864e3b6d2yangsu@google.com 1486fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com interface->fBindingsExported = (GrGLBinding)(kES2_GrGLBinding | kES1_GrGLBinding); 1496fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com } 1506fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com glInterface.get()->ref(); 1516fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com return glInterface.get(); 1526fb736fc2ea5f3f7ac44494211cc6755180ca192bsalomon@google.com} 153