• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2011 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 #include "gl/GrGLInterface.h"
10 
11 #import <OpenGLES/ES2/gl.h>
12 #import <OpenGLES/ES2/glext.h>
13 
GrGLCreateNativeInterface()14 const GrGLInterface* GrGLCreateNativeInterface() {
15     GrGLInterface* interface = SkNEW(GrGLInterface);
16 
17     GrGLInterface::Functions* functions = &interface->fFunctions;
18 
19     functions->fActiveTexture = glActiveTexture;
20     functions->fAttachShader = glAttachShader;
21     functions->fBindAttribLocation = glBindAttribLocation;
22     functions->fBindBuffer = glBindBuffer;
23     functions->fBindTexture = glBindTexture;
24     functions->fBlendColor = glBlendColor;
25     functions->fBlendFunc = glBlendFunc;
26     functions->fBufferData = (GrGLBufferDataProc)glBufferData;
27     functions->fBufferSubData = (GrGLBufferSubDataProc)glBufferSubData;
28     functions->fClear = glClear;
29     functions->fClearColor = glClearColor;
30     functions->fClearStencil = glClearStencil;
31     functions->fColorMask = glColorMask;
32     functions->fCompileShader = glCompileShader;
33     functions->fCompressedTexImage2D = glCompressedTexImage2D;
34     functions->fCompressedTexSubImage2D = glCompressedTexSubImage2D;
35     functions->fCopyTexSubImage2D = glCopyTexSubImage2D;
36     functions->fCreateProgram = glCreateProgram;
37     functions->fCreateShader = glCreateShader;
38     functions->fCullFace = glCullFace;
39     functions->fDeleteBuffers = glDeleteBuffers;
40     functions->fDeleteProgram = glDeleteProgram;
41     functions->fDeleteShader = glDeleteShader;
42     functions->fDeleteTextures = glDeleteTextures;
43     functions->fDepthMask = glDepthMask;
44     functions->fDisable = glDisable;
45     functions->fDisableVertexAttribArray = glDisableVertexAttribArray;
46     functions->fDrawArrays = glDrawArrays;
47     functions->fDrawBuffer = NULL;
48     functions->fDrawBuffers = NULL;
49     functions->fDrawElements = glDrawElements;
50     functions->fEnable = glEnable;
51     functions->fEnableVertexAttribArray = glEnableVertexAttribArray;
52     functions->fFinish = glFinish;
53     functions->fFlush = glFlush;
54     functions->fFrontFace = glFrontFace;
55     functions->fGenBuffers = glGenBuffers;
56     functions->fGenerateMipmap = glGenerateMipmap;
57     functions->fGetBufferParameteriv = glGetBufferParameteriv;
58     functions->fGetError = glGetError;
59     functions->fGetIntegerv = glGetIntegerv;
60     functions->fGetProgramInfoLog = glGetProgramInfoLog;
61     functions->fGetProgramiv = glGetProgramiv;
62     functions->fGetShaderInfoLog = glGetShaderInfoLog;
63     functions->fGetShaderiv = glGetShaderiv;
64     functions->fGetString = glGetString;
65     functions->fGenTextures = glGenTextures;
66     functions->fGetUniformLocation = glGetUniformLocation;
67     functions->fLineWidth = glLineWidth;
68     functions->fLinkProgram = glLinkProgram;
69     functions->fPixelStorei = glPixelStorei;
70     functions->fReadBuffer = NULL;
71     functions->fReadPixels = glReadPixels;
72     functions->fScissor = glScissor;
73     functions->fShaderSource = (GrGLShaderSourceProc) glShaderSource;
74     functions->fStencilFunc = glStencilFunc;
75     functions->fStencilFuncSeparate = glStencilFuncSeparate;
76     functions->fStencilMask = glStencilMask;
77     functions->fStencilMaskSeparate = glStencilMaskSeparate;
78     functions->fStencilOp = glStencilOp;
79     functions->fStencilOpSeparate = glStencilOpSeparate;
80     // mac uses GLenum for internalFormat param (non-standard)
81     // amounts to int vs. uint.
82     functions->fTexImage2D = (GrGLTexImage2DProc)glTexImage2D;
83 #if GL_ARB_texture_storage
84     functions->fTexStorage2D = glTexStorage2D;
85 #elif GL_EXT_texture_storage
86     functions->fTexStorage2D = glTexStorage2DEXT;
87 #endif
88 #if GL_EXT_discard_framebuffer
89     functions->fDiscardFramebuffer = glDiscardFramebufferEXT;
90 #endif
91     functions->fTexParameteri = glTexParameteri;
92     functions->fTexParameteriv = glTexParameteriv;
93     functions->fTexSubImage2D = glTexSubImage2D;
94     functions->fUniform1f = glUniform1f;
95     functions->fUniform1i = glUniform1i;
96     functions->fUniform1fv = glUniform1fv;
97     functions->fUniform1iv = glUniform1iv;
98     functions->fUniform2f = glUniform2f;
99     functions->fUniform2i = glUniform2i;
100     functions->fUniform2fv = glUniform2fv;
101     functions->fUniform2iv = glUniform2iv;
102     functions->fUniform3f = glUniform3f;
103     functions->fUniform3i = glUniform3i;
104     functions->fUniform3fv = glUniform3fv;
105     functions->fUniform3iv = glUniform3iv;
106     functions->fUniform4f = glUniform4f;
107     functions->fUniform4i = glUniform4i;
108     functions->fUniform4fv = glUniform4fv;
109     functions->fUniform4iv = glUniform4iv;
110     functions->fUniform4fv = glUniform4fv;
111     functions->fUniformMatrix2fv = glUniformMatrix2fv;
112     functions->fUniformMatrix3fv = glUniformMatrix3fv;
113     functions->fUniformMatrix4fv = glUniformMatrix4fv;
114     functions->fUseProgram = glUseProgram;
115     functions->fVertexAttrib4fv = glVertexAttrib4fv;
116     functions->fVertexAttribPointer = glVertexAttribPointer;
117     functions->fViewport = glViewport;
118     functions->fGenFramebuffers = glGenFramebuffers;
119     functions->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv;
120     functions->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv;
121     functions->fBindFramebuffer = glBindFramebuffer;
122     functions->fFramebufferTexture2D = glFramebufferTexture2D;
123     functions->fCheckFramebufferStatus = glCheckFramebufferStatus;
124     functions->fDeleteFramebuffers = glDeleteFramebuffers;
125     functions->fRenderbufferStorage = glRenderbufferStorage;
126     functions->fGenRenderbuffers = glGenRenderbuffers;
127     functions->fDeleteRenderbuffers = glDeleteRenderbuffers;
128     functions->fFramebufferRenderbuffer = glFramebufferRenderbuffer;
129     functions->fBindRenderbuffer = glBindRenderbuffer;
130 
131 #if GL_OES_mapbuffer
132     functions->fMapBuffer = glMapBufferOES;
133     functions->fUnmapBuffer = glUnmapBufferOES;
134 #endif
135 
136 #if GL_EXT_map_buffer_range || GL_ES_VERSION_3_0
137     functions->fMapBufferRange = glMapBufferRangeEXT;
138     functions->fFlushMappedBufferRange = glFlushMappedBufferRangeEXT;
139 #endif
140 
141 #if GL_APPLE_framebuffer_multisample
142     functions->fRenderbufferStorageMultisampleES2APPLE = glRenderbufferStorageMultisampleAPPLE;
143     functions->fResolveMultisampleFramebuffer = glResolveMultisampleFramebufferAPPLE;
144 #endif
145 
146 #if GL_OES_vertex_array_object
147     functions->fBindVertexArray = glBindVertexArrayOES;
148     functions->fDeleteVertexArrays = glDeleteVertexArraysOES;
149     functions->fGenVertexArrays = glGenVertexArraysOES;
150 #endif
151 
152 #if GL_EXT_debug_marker
153     functions->fInsertEventMarker = glInsertEventMarkerEXT;
154     functions->fPushGroupMarker = glPushGroupMarkerEXT;
155     functions->fPopGroupMarker = glPopGroupMarkerEXT;
156 #endif
157 
158 #if GL_ES_VERSION_3_0 || GL_ARB_invalidate_subdata
159     functions->fInvalidateFramebuffer = glInvalidateFramebuffer;
160     functions->fInvalidateSubFramebuffer = glInvalidateSubFramebuffer;
161 #endif
162 
163 #if GL_ARB_invalidate_subdata
164     functions->fInvalidateBufferData = glInvalidateBufferData;
165     functions->fInvalidateBufferSubData = glInvalidateBufferSubData;
166     functions->fInvalidateTexImage = glInvalidateTexImage;
167     functions->fInvalidateTexSubImage = glInvalidateTexSubImage;
168 #endif
169 
170     interface->fStandard = kGLES_GrGLStandard;
171     interface->fExtensions.init(kGLES_GrGLStandard, glGetString, NULL, glGetIntegerv);
172 
173     return interface;
174 }
175