void WebGLContext::DrawArrays(GLenum mode, GLint first, GLsizei vertCount) { const char funcName[] = "drawArrays"; if (IsContextLost()) return; MakeContextCurrent(); bool error = false; ScopedResolveTexturesForDraw scopedResolve(this, funcName, &error); if (error) return; const GLsizei instanceCount = 1; if (!DrawArrays_check(funcName, mode, first, vertCount, instanceCount)) return; const ScopedDrawHelper scopedHelper(this, funcName, first, vertCount, instanceCount, &error); if (error) return; const ScopedDrawWithTransformFeedback scopedTF(this, funcName, mode, vertCount, instanceCount, &error); if (error) return; { ScopedDrawCallWrapper wrapper(*this); gl->fDrawArrays(mode, first, vertCount); } Draw_cleanup(funcName); scopedTF.Advance(); }
void WebGLContext::DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei primcount) { const char funcName[] = "drawArraysInstanced"; if (IsContextLost()) return; if (!ValidateDrawModeEnum(mode, funcName)) return; MakeContextCurrent(); bool error; ScopedResolveTexturesForDraw scopedResolve(this, funcName, &error); if (error) return; if (!DrawArrays_check(first, count, primcount, funcName)) return; if (!DrawInstanced_check(funcName)) return; RunContextLossTimer(); { ScopedMaskWorkaround autoMask(*this); gl->fDrawArraysInstanced(mode, first, count, primcount); } Draw_cleanup(funcName); }
void WebGLContext::DrawElements(GLenum mode, GLsizei count, GLenum type, WebGLintptr byteOffset) { const char funcName[] = "drawElements"; if (IsContextLost()) return; if (!ValidateDrawModeEnum(mode, funcName)) return; MakeContextCurrent(); bool error; ScopedResolveTexturesForDraw scopedResolve(this, funcName, &error); if (error) return; GLuint upperBound = 0; if (!DrawElements_check(count, type, byteOffset, 1, funcName, &upperBound)) return; RunContextLossTimer(); { ScopedMaskWorkaround autoMask(*this); if (gl->IsSupported(gl::GLFeature::draw_range_elements)) { gl->fDrawRangeElements(mode, 0, upperBound, count, type, reinterpret_cast<GLvoid*>(byteOffset)); } else { gl->fDrawElements(mode, count, type, reinterpret_cast<GLvoid*>(byteOffset)); } } Draw_cleanup(funcName); }
void WebGLContext::DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, WebGLintptr byteOffset, GLsizei primcount) { const char funcName[] = "drawElementsInstanced"; if (IsContextLost()) return; if (!ValidateDrawModeEnum(mode, funcName)) return; MakeContextCurrent(); bool error; ScopedResolveTexturesForDraw scopedResolve(this, funcName, &error); if (error) return; GLuint upperBound = 0; if (!DrawElements_check(count, type, byteOffset, primcount, funcName, &upperBound)) return; if (!DrawInstanced_check(funcName)) return; RunContextLossTimer(); { ScopedMaskWorkaround autoMask(*this); gl->fDrawElementsInstanced(mode, count, type, reinterpret_cast<GLvoid*>(byteOffset), primcount); } Draw_cleanup(funcName); }