1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "gpu/skia_bindings/gl_bindings_skia_cmd_buffer.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GL_GLEXT_PROTOTYPES
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GL_GLEXT_PROTOTYPES
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "gpu/GLES2/gl2extchromium.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/khronos/GLES2/gl2.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/khronos/GLES2/gl2ext.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/gpu/gl/GrGLInterface.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace skia_bindings {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GrGLInterface* CreateCommandBufferSkiaGLBinding() {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GrGLInterface* interface = new GrGLInterface;
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  interface->fStandard = kGLES_GrGLStandard;
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  interface->fExtensions.init(kGLES_GrGLStandard,
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              glGetString,
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              NULL,
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              glGetIntegerv);
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  GrGLInterface::Functions* functions = &interface->fFunctions;
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fActiveTexture = glActiveTexture;
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fAttachShader = glAttachShader;
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBindAttribLocation = glBindAttribLocation;
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBindBuffer = glBindBuffer;
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBindTexture = glBindTexture;
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBindVertexArray = glBindVertexArrayOES;
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBlendColor = glBlendColor;
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBlendFunc = glBlendFunc;
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBufferData = glBufferData;
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBufferSubData = glBufferSubData;
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fClear = glClear;
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fClearColor = glClearColor;
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fClearStencil = glClearStencil;
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fColorMask = glColorMask;
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fCompileShader = glCompileShader;
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fCompressedTexImage2D = glCompressedTexImage2D;
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fCopyTexSubImage2D = glCopyTexSubImage2D;
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  functions->fCopyTextureCHROMIUM = glCopyTextureCHROMIUM;
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fCreateProgram = glCreateProgram;
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fCreateShader = glCreateShader;
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fCullFace = glCullFace;
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDeleteBuffers = glDeleteBuffers;
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDeleteProgram = glDeleteProgram;
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDeleteShader = glDeleteShader;
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDeleteTextures = glDeleteTextures;
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDeleteVertexArrays = glDeleteVertexArraysOES;
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDepthMask = glDepthMask;
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDisable = glDisable;
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDisableVertexAttribArray = glDisableVertexAttribArray;
55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  functions->fDiscardFramebuffer = glDiscardFramebufferEXT;
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDrawArrays = glDrawArrays;
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDrawElements = glDrawElements;
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fEnable = glEnable;
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fEnableVertexAttribArray = glEnableVertexAttribArray;
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fFinish = glFinish;
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fFlush = glFlush;
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fFrontFace = glFrontFace;
63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGenBuffers = glGenBuffers;
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGenTextures = glGenTextures;
65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGenVertexArrays = glGenVertexArraysOES;
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetBufferParameteriv = glGetBufferParameteriv;
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetError = glGetError;
68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetIntegerv = glGetIntegerv;
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetProgramInfoLog = glGetProgramInfoLog;
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetProgramiv = glGetProgramiv;
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetShaderInfoLog = glGetShaderInfoLog;
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetShaderiv = glGetShaderiv;
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetString = glGetString;
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetUniformLocation = glGetUniformLocation;
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fInsertEventMarker = glInsertEventMarkerEXT;
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fLineWidth = glLineWidth;
77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fLinkProgram = glLinkProgram;
780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  functions->fMapBufferSubData = glMapBufferSubDataCHROMIUM;
790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  functions->fMapTexSubImage2D = glMapTexSubImage2DCHROMIUM;
80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fPixelStorei = glPixelStorei;
81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fPopGroupMarker = glPopGroupMarkerEXT;
82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fPushGroupMarker = glPushGroupMarkerEXT;
83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fReadPixels = glReadPixels;
84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fScissor = glScissor;
85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fShaderSource = glShaderSource;
86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fStencilFunc = glStencilFunc;
87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fStencilFuncSeparate = glStencilFuncSeparate;
88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fStencilMask = glStencilMask;
89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fStencilMaskSeparate = glStencilMaskSeparate;
90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fStencilOp = glStencilOp;
91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fStencilOpSeparate = glStencilOpSeparate;
92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fTexImage2D = glTexImage2D;
93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fTexParameteri = glTexParameteri;
94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fTexParameteriv = glTexParameteriv;
95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fTexStorage2D = glTexStorage2DEXT;
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fTexSubImage2D = glTexSubImage2D;
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform1f = glUniform1f;
98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform1i = glUniform1i;
99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform1fv = glUniform1fv;
100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform1iv = glUniform1iv;
101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform2f = glUniform2f;
102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform2i = glUniform2i;
103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform2fv = glUniform2fv;
104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform2iv = glUniform2iv;
105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform3f = glUniform3f;
106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform3i = glUniform3i;
107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform3fv = glUniform3fv;
108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform3iv = glUniform3iv;
109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform4f = glUniform4f;
110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform4i = glUniform4i;
111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform4fv = glUniform4fv;
112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniform4iv = glUniform4iv;
113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniformMatrix2fv = glUniformMatrix2fv;
114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniformMatrix3fv = glUniformMatrix3fv;
115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUniformMatrix4fv = glUniformMatrix4fv;
1160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  functions->fUnmapBufferSubData = glUnmapBufferSubDataCHROMIUM;
1170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  functions->fUnmapTexSubImage2D = glUnmapTexSubImage2DCHROMIUM;
118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fUseProgram = glUseProgram;
119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fVertexAttrib4fv = glVertexAttrib4fv;
120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fVertexAttribPointer = glVertexAttribPointer;
121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fViewport = glViewport;
122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBindFramebuffer = glBindFramebuffer;
123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBindRenderbuffer = glBindRenderbuffer;
124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fCheckFramebufferStatus = glCheckFramebufferStatus;
125a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDeleteFramebuffers = glDeleteFramebuffers;
126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fDeleteRenderbuffers = glDeleteRenderbuffers;
127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fFramebufferRenderbuffer = glFramebufferRenderbuffer;
128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fFramebufferTexture2D = glFramebufferTexture2D;
129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fFramebufferTexture2DMultisample =
1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    glFramebufferTexture2DMultisampleEXT;
131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGenFramebuffers = glGenFramebuffers;
132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGenRenderbuffers = glGenRenderbuffers;
133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetFramebufferAttachmentParameteriv =
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    glGetFramebufferAttachmentParameteriv;
135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv;
136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fRenderbufferStorage = glRenderbufferStorage;
137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fRenderbufferStorageMultisample =
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    glRenderbufferStorageMultisampleCHROMIUM;
139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fRenderbufferStorageMultisampleES2EXT =
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    glRenderbufferStorageMultisampleEXT;
141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBindUniformLocation = glBindUniformLocationCHROMIUM;
142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fBlitFramebuffer = glBlitFramebufferCHROMIUM;
143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  functions->fGenerateMipmap = glGenerateMipmap;
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  functions->fMatrixLoadf = glMatrixLoadfCHROMIUM;
1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  functions->fMatrixLoadIdentity = glMatrixLoadIdentityCHROMIUM;
146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return interface;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}  // namespace skia
151