2 * Copyright 2013 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #include "GrGLNoOpInterface.h"
12 // the OpenGLES 2.0 spec says this must be >= 128
13 static const GrGLint kDefaultMaxVertexUniformVectors = 128;
15 // the OpenGLES 2.0 spec says this must be >=16
16 static const GrGLint kDefaultMaxFragmentUniformVectors = 16;
18 // the OpenGLES 2.0 spec says this must be >= 8
19 static const GrGLint kDefaultMaxVertexAttribs = 8;
21 // the OpenGLES 2.0 spec says this must be >= 8
22 static const GrGLint kDefaultMaxVaryingVectors = 8;
24 static const char* kExtensions[] = {
25 "GL_ARB_framebuffer_object",
26 "GL_ARB_blend_func_extended",
28 "GL_ARB_draw_buffers",
29 "GL_ARB_occlusion_query",
35 const GrGLubyte* combined_extensions_string() {
36 static SkString gExtString;
37 static SkMutex gMutex;
39 if (0 == gExtString.size()) {
40 for (size_t i = 0; i < SK_ARRAY_COUNT(kExtensions) - 1; ++i) {
41 gExtString.append(kExtensions[i]);
42 gExtString.append(" ");
44 gExtString.append(kExtensions[SK_ARRAY_COUNT(kExtensions) - 1]);
47 return (const GrGLubyte*) gExtString.c_str();
51 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlendColor(GrGLclampf red,
57 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBindFragDataLocation(GrGLuint program,
59 const GrGLchar* name) {
62 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlendFunc(GrGLenum sfactor,
66 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBufferSubData(GrGLenum target,
69 const GrGLvoid* data) {
72 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLClear(GrGLbitfield mask) {
75 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLClearColor(GrGLclampf red,
81 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLClearStencil(GrGLint s) {
84 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLColorMask(GrGLboolean red,
90 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCompileShader(GrGLuint shader) {
93 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCompressedTexImage2D(GrGLenum target,
95 GrGLenum internalformat,
100 const GrGLvoid* data) {
103 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCompressedTexSubImage2D(GrGLenum target,
111 const GrGLvoid* data) {
114 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCopyTexSubImage2D(GrGLenum target,
124 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLCullFace(GrGLenum mode) {
127 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDepthMask(GrGLboolean flag) {
130 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDisable(GrGLenum cap) {
133 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDisableVertexAttribArray(GrGLuint index) {
136 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawArrays(GrGLenum mode,
141 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawBuffer(GrGLenum mode) {
144 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawBuffers(GrGLsizei n,
145 const GrGLenum* bufs) {
148 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDrawElements(GrGLenum mode,
151 const GrGLvoid* indices) {
154 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEnable(GrGLenum cap) {
157 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEnableVertexAttribArray(GrGLuint index) {
160 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLEndQuery(GrGLenum target) {
163 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFinish() {
166 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFlush() {
169 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLFrontFace(GrGLenum mode) {
172 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLLineWidth(GrGLfloat width) {
175 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLLinkProgram(GrGLuint program) {
178 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLMatrixLoadf(GrGLenum, const GrGLfloat*) {
181 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLMatrixLoadIdentity(GrGLenum) {
184 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLQueryCounter(GrGLuint id, GrGLenum target) {
187 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLReadBuffer(GrGLenum src) {
190 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLScissor(GrGLint x,
196 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLShaderSource(GrGLuint shader,
198 #if GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE
199 const char* const * str,
203 const GrGLint* length) {
206 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilFunc(GrGLenum func, GrGLint ref, GrGLuint mask) {
209 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilFuncSeparate(GrGLenum face,
215 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilMask(GrGLuint mask) {
218 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilMaskSeparate(GrGLenum face, GrGLuint mask) {
221 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilOp(GrGLenum fail, GrGLenum zfail, GrGLenum zpass) {
224 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLStencilOpSeparate(GrGLenum face,
230 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexImage2D(GrGLenum target,
232 GrGLint internalformat,
238 const GrGLvoid* pixels) {
241 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexParameteri(GrGLenum target,
246 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexParameteriv(GrGLenum target,
248 const GrGLint* params) {
251 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexStorage2D(GrGLenum target,
253 GrGLenum internalformat,
258 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDiscardFramebuffer(GrGLenum target,
259 GrGLsizei numAttachments,
260 const GrGLenum* attachments) {
263 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLTexSubImage2D(GrGLenum target,
271 const GrGLvoid* pixels) {
274 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1f(GrGLint location, GrGLfloat v0) {
277 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1i(GrGLint location, GrGLint v0) {
280 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1fv(GrGLint location,
282 const GrGLfloat* v) {
285 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform1iv(GrGLint location,
290 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2f(GrGLint location, GrGLfloat v0, GrGLfloat v1) {
293 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2i(GrGLint location, GrGLint v0, GrGLint v1) {
296 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2fv(GrGLint location,
298 const GrGLfloat* v) {
301 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform2iv(GrGLint location,
306 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3f(GrGLint location,
312 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3i(GrGLint location,
318 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3fv(GrGLint location,
320 const GrGLfloat* v) {
323 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform3iv(GrGLint location,
328 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4f(GrGLint location,
335 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4i(GrGLint location,
342 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4fv(GrGLint location,
344 const GrGLfloat* v) {
347 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniform4iv(GrGLint location,
352 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix2fv(GrGLint location,
354 GrGLboolean transpose,
355 const GrGLfloat* value) {
358 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix3fv(GrGLint location,
360 GrGLboolean transpose,
361 const GrGLfloat* value) {
364 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLUniformMatrix4fv(GrGLint location,
366 GrGLboolean transpose,
367 const GrGLfloat* value) {
370 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib1f(GrGLuint indx, const GrGLfloat value) {
373 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib2fv(GrGLuint indx, const GrGLfloat* values) {
376 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib3fv(GrGLuint indx, const GrGLfloat* values) {
379 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttrib4fv(GrGLuint indx, const GrGLfloat* values) {
382 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLVertexAttribPointer(GrGLuint indx,
385 GrGLboolean normalized,
387 const GrGLvoid* ptr) {
390 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLViewport(GrGLint x,
396 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetFramebufferAttachmentParameteriv(GrGLenum target,
402 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetRenderbufferParameteriv(GrGLenum target,
407 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLRenderbufferStorage(GrGLenum target,
408 GrGLenum internalformat,
413 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLRenderbufferStorageMultisample(GrGLenum target,
415 GrGLenum internalformat,
420 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBlitFramebuffer(GrGLint srcX0,
432 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLResolveMultisampleFramebuffer() {
435 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLBindFragDataLocationIndexed(GrGLuint program,
436 GrGLuint colorNumber,
438 const GrGLchar * name) {
441 GrGLenum GR_GL_FUNCTION_TYPE noOpGLCheckFramebufferStatus(GrGLenum target) {
443 GrAlwaysAssert(GR_GL_FRAMEBUFFER == target);
445 return GR_GL_FRAMEBUFFER_COMPLETE;
448 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGenIds(GrGLsizei n, GrGLuint* ids) {
449 static int gCurrID = 1;
450 for (int i = 0; i < n; ++i) {
455 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLDeleteIds(GrGLsizei n, const GrGLuint* ids) {
458 GrGLenum GR_GL_FUNCTION_TYPE noOpGLGetError() {
459 return GR_GL_NO_ERROR;
462 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetIntegerv(GrGLenum pname, GrGLint* params) {
463 // TODO: remove from Ganesh the #defines for gets we don't use.
464 // We would like to minimize gets overall due to performance issues
466 case GR_GL_CONTEXT_PROFILE_MASK:
467 *params = GR_GL_CONTEXT_COMPATIBILITY_PROFILE_BIT;
469 case GR_GL_STENCIL_BITS:
475 case GR_GL_FRAMEBUFFER_BINDING:
484 case GR_GL_MAX_TEXTURE_IMAGE_UNITS:
487 case GR_GL_MAX_TEXTURE_COORDS:
490 case GR_GL_MAX_VERTEX_UNIFORM_VECTORS:
491 *params = kDefaultMaxVertexUniformVectors;
493 case GR_GL_MAX_FRAGMENT_UNIFORM_VECTORS:
494 *params = kDefaultMaxFragmentUniformVectors;
496 case GR_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
499 case GR_GL_NUM_COMPRESSED_TEXTURE_FORMATS:
502 case GR_GL_COMPRESSED_TEXTURE_FORMATS:
504 case GR_GL_MAX_TEXTURE_SIZE:
507 case GR_GL_MAX_RENDERBUFFER_SIZE:
510 case GR_GL_MAX_SAMPLES:
513 case GR_GL_MAX_VERTEX_ATTRIBS:
514 *params = kDefaultMaxVertexAttribs;
516 case GR_GL_MAX_VARYING_VECTORS:
517 *params = kDefaultMaxVaryingVectors;
519 case GR_GL_NUM_EXTENSIONS:
520 *params = SK_ARRAY_COUNT(kExtensions);
523 SkFAIL("Unexpected pname to GetIntegerv");
527 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetInfoLog(GrGLuint program,
539 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetShaderOrProgramiv(GrGLuint program,
543 case GR_GL_LINK_STATUS: // fallthru
544 case GR_GL_COMPILE_STATUS:
545 *params = GR_GL_TRUE;
547 case GR_GL_INFO_LOG_LENGTH:
550 // we don't expect any other pnames
552 SkFAIL("Unexpected pname to GetProgramiv");
558 template <typename T>
559 void query_result(GrGLenum GLtarget, GrGLenum pname, T *params) {
561 case GR_GL_QUERY_RESULT_AVAILABLE:
562 *params = GR_GL_TRUE;
564 case GR_GL_QUERY_RESULT:
568 SkFAIL("Unexpected pname passed to GetQueryObject.");
574 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryiv(GrGLenum GLtarget,
578 case GR_GL_CURRENT_QUERY:
581 case GR_GL_QUERY_COUNTER_BITS:
585 SkFAIL("Unexpected pname passed GetQueryiv.");
589 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjecti64v(GrGLuint id,
592 query_result(id, pname, params);
595 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectiv(GrGLuint id,
598 query_result(id, pname, params);
601 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectui64v(GrGLuint id,
603 GrGLuint64 *params) {
604 query_result(id, pname, params);
607 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetQueryObjectuiv(GrGLuint id,
610 query_result(id, pname, params);
613 const GrGLubyte* GR_GL_FUNCTION_TYPE noOpGLGetString(GrGLenum name) {
615 case GR_GL_EXTENSIONS:
616 return combined_extensions_string();
618 return (const GrGLubyte*)"4.0 Debug GL";
619 case GR_GL_SHADING_LANGUAGE_VERSION:
620 return (const GrGLubyte*)"4.20.8 Debug GLSL";
622 return (const GrGLubyte*)"Debug Vendor";
624 return (const GrGLubyte*)"The Debug (Non-)Renderer";
626 SkFAIL("Unexpected name passed to GetString");
631 const GrGLubyte* GR_GL_FUNCTION_TYPE noOpGLGetStringi(GrGLenum name, GrGLuint i) {
633 case GR_GL_EXTENSIONS:
634 if (static_cast<size_t>(i) <= SK_ARRAY_COUNT(kExtensions)) {
635 return (const GrGLubyte*) kExtensions[i];
640 SkFAIL("Unexpected name passed to GetStringi");
645 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLGetTexLevelParameteriv(GrGLenum target,
649 // we used to use this to query stuff about externally created textures,
650 // now we just require clients to tell us everything about the texture.
651 SkFAIL("Should never query texture parameters.");
654 GrGLint GR_GL_FUNCTION_TYPE noOpGLGetUniformLocation(GrGLuint program, const char* name) {
655 static int gUniLocation = 0;
656 return ++gUniLocation;
659 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLInsertEventMarker(GrGLsizei length, const char* marker) {
661 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLPushGroupMarker(GrGLsizei length , const char* marker) {
663 GrGLvoid GR_GL_FUNCTION_TYPE noOpGLPopGroupMarker() {