| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 | 8 |
| 9 #include "GrGpuGL.h" | 9 #include "GrGpuGL.h" |
| 10 #include "GrGLStencilBuffer.h" | 10 #include "GrGLStencilBuffer.h" |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 | 278 |
| 279 // Enable supported shader-related caps | 279 // Enable supported shader-related caps |
| 280 if (kDesktop_GrGLBinding == this->glBinding()) { | 280 if (kDesktop_GrGLBinding == this->glBinding()) { |
| 281 caps->fDualSourceBlendingSupport = this->glVersion() >= GR_GL_VER(3,3) |
| | 281 caps->fDualSourceBlendingSupport = this->glVersion() >= GR_GL_VER(3,3) |
| |
| 282 this->hasExtension("GL_ARB_blend_func
_extended"); | 282 this->hasExtension("GL_ARB_blend_func
_extended"); |
| 283 caps->fShaderDerivativeSupport = true; | 283 caps->fShaderDerivativeSupport = true; |
| 284 // we don't support GL_ARB_geometry_shader4, just GL 3.2+ GS | 284 // we don't support GL_ARB_geometry_shader4, just GL 3.2+ GS |
| 285 caps->fGeometryShaderSupport = this->glVersion() >= GR_GL_VER(3,2) && | 285 caps->fGeometryShaderSupport = this->glVersion() >= GR_GL_VER(3,2) && |
| 286 this->glslGeneration() >= k150_GrGLSLGene
ration; | 286 this->glslGeneration() >= k150_GrGLSLGene
ration; |
| 287 } else { | 287 } else { |
| 288 caps->fShaderDerivativeSupport = | 288 caps->fShaderDerivativeSupport = this->hasExtension("GL_OES_standard_der
ivatives"); |
| 289 this->hasExtension("GL_OES_standard_derivatives"); | |
| 290 } | 289 } |
| 291 | 290 |
| 292 if (GrGLCaps::kNone_MSFBOType != this->glCaps().msFBOType()) { | 291 if (GrGLCaps::kImaginationES_MSFBOType == this->glCaps().msFBOType()) { |
| 292 GR_GL_GetIntegerv(this->glInterface(), GR_GL_MAX_SAMPLES_IMG, &caps->fMa
xSampleCount); |
| 293 } else if (GrGLCaps::kNone_MSFBOType != this->glCaps().msFBOType()) { |
| 293 GR_GL_GetIntegerv(this->glInterface(), GR_GL_MAX_SAMPLES, &caps->fMaxSam
pleCount); | 294 GR_GL_GetIntegerv(this->glInterface(), GR_GL_MAX_SAMPLES, &caps->fMaxSam
pleCount); |
| 294 } | 295 } |
| 295 } | 296 } |
| 296 | 297 |
| 297 void GrGpuGL::fillInConfigRenderableTable() { | 298 void GrGpuGL::fillInConfigRenderableTable() { |
| 298 | 299 |
| 299 // OpenGL < 3.0 | 300 // OpenGL < 3.0 |
| 300 // no support for render targets unless the GL_ARB_framebuffer_object | 301 // no support for render targets unless the GL_ARB_framebuffer_object |
| 301 // extension is supported (in which case we get ALPHA, RED, RG, RGB, | 302 // extension is supported (in which case we get ALPHA, RED, RG, RGB, |
| 302 // RGBA (ALPHA8, RGBA4, RGBA8) for OpenGL > 1.1). Note that we | 303 // RGBA (ALPHA8, RGBA4, RGBA8) for OpenGL > 1.1). Note that we |
| (...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 GrGLenum status; | 873 GrGLenum status; |
| 873 | 874 |
| 874 GrGLenum msColorFormat = 0; // suppress warning | 875 GrGLenum msColorFormat = 0; // suppress warning |
| 875 | 876 |
| 876 GL_CALL(GenFramebuffers(1, &desc->fTexFBOID)); | 877 GL_CALL(GenFramebuffers(1, &desc->fTexFBOID)); |
| 877 if (!desc->fTexFBOID) { | 878 if (!desc->fTexFBOID) { |
| 878 goto FAILED; | 879 goto FAILED; |
| 879 } | 880 } |
| 880 | 881 |
| 881 | 882 |
| 882 // If we are using multisampling we will create two FBOS. We render | 883 // If we are using multisampling we will create two FBOS. We render to one a
nd then resolve to |
| 883 // to one and then resolve to the texture bound to the other. | 884 // the texture bound to the other. The exception is the IMG multisample exte
nsion. With this |
| 884 if (desc->fSampleCnt > 0) { | 885 // extension the texture is multisampled when rendered to and then auto-reso
lves it when it is |
| 886 // rendered from. |
| 887 if (desc->fSampleCnt > 0 && GrGLCaps::kImaginationES_MSFBOType != this->glCa
ps().msFBOType()) { |
| 885 if (GrGLCaps::kNone_MSFBOType == this->glCaps().msFBOType()) { | 888 if (GrGLCaps::kNone_MSFBOType == this->glCaps().msFBOType()) { |
| 886 goto FAILED; | 889 goto FAILED; |
| 887 } | 890 } |
| 888 GL_CALL(GenFramebuffers(1, &desc->fRTFBOID)); | 891 GL_CALL(GenFramebuffers(1, &desc->fRTFBOID)); |
| 889 GL_CALL(GenRenderbuffers(1, &desc->fMSColorRenderbufferID)); | 892 GL_CALL(GenRenderbuffers(1, &desc->fMSColorRenderbufferID)); |
| 890 if (!desc->fRTFBOID || | 893 if (!desc->fRTFBOID || |
| 891 !desc->fMSColorRenderbufferID || | 894 !desc->fMSColorRenderbufferID || |
| 892 !this->configToGLFormats(desc->fConfig, | 895 !this->configToGLFormats(desc->fConfig, |
| 893 // GLES requires sized internal formats | 896 // GLES requires sized internal formats |
| 894 kES2_GrGLBinding == this->glBinding(), | 897 kES2_GrGLBinding == this->glBinding(), |
| (...skipping 19 matching lines...) Expand all Loading... |
| 914 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, desc->fRTFBOID)); | 917 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, desc->fRTFBOID)); |
| 915 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 918 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
| 916 GR_GL_COLOR_ATTACHMENT0, | 919 GR_GL_COLOR_ATTACHMENT0, |
| 917 GR_GL_RENDERBUFFER, | 920 GR_GL_RENDERBUFFER, |
| 918 desc->fMSColorRenderbufferID)); | 921 desc->fMSColorRenderbufferID)); |
| 919 if (!this->glCaps().isConfigVerifiedColorAttachment(desc->fConfig)) { | 922 if (!this->glCaps().isConfigVerifiedColorAttachment(desc->fConfig)) { |
| 920 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); | 923 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); |
| 921 if (status != GR_GL_FRAMEBUFFER_COMPLETE) { | 924 if (status != GR_GL_FRAMEBUFFER_COMPLETE) { |
| 922 goto FAILED; | 925 goto FAILED; |
| 923 } | 926 } |
| 924 fGLContext.info().caps().markConfigAsValidColorAttachment( | 927 fGLContext.info().caps().markConfigAsValidColorAttachment(desc->fCon
fig); |
| 925 desc->fConfig); | |
| 926 } | 928 } |
| 927 } | 929 } |
| 928 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, desc->fTexFBOID)); | 930 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, desc->fTexFBOID)); |
| 929 | 931 |
| 930 GL_CALL(FramebufferTexture2D(GR_GL_FRAMEBUFFER, | 932 if (GrGLCaps::kImaginationES_MSFBOType == this->glCaps().msFBOType() && desc
->fSampleCnt > 0) { |
| 931 GR_GL_COLOR_ATTACHMENT0, | 933 GL_CALL(FramebufferTexture2DMultisample(GR_GL_FRAMEBUFFER, |
| 932 GR_GL_TEXTURE_2D, | 934 GR_GL_COLOR_ATTACHMENT0, |
| 933 texID, 0)); | 935 GR_GL_TEXTURE_2D, |
| 936 texID, 0, desc->fSampleCnt)); |
| 937 } else { |
| 938 GL_CALL(FramebufferTexture2D(GR_GL_FRAMEBUFFER, |
| 939 GR_GL_COLOR_ATTACHMENT0, |
| 940 GR_GL_TEXTURE_2D, |
| 941 texID, 0)); |
| 942 } |
| 934 if (!this->glCaps().isConfigVerifiedColorAttachment(desc->fConfig)) { | 943 if (!this->glCaps().isConfigVerifiedColorAttachment(desc->fConfig)) { |
| 935 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); | 944 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); |
| 936 if (status != GR_GL_FRAMEBUFFER_COMPLETE) { | 945 if (status != GR_GL_FRAMEBUFFER_COMPLETE) { |
| 937 goto FAILED; | 946 goto FAILED; |
| 938 } | 947 } |
| 939 fGLContext.info().caps().markConfigAsValidColorAttachment(desc->fConfig)
; | 948 fGLContext.info().caps().markConfigAsValidColorAttachment(desc->fConfig)
; |
| 940 } | 949 } |
| 941 | 950 |
| 942 return true; | 951 return true; |
| 943 | 952 |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1165 rt->setStencilBuffer(sb); | 1174 rt->setStencilBuffer(sb); |
| 1166 return true; | 1175 return true; |
| 1167 } | 1176 } |
| 1168 sb->abandon(); // otherwise we lose sbID | 1177 sb->abandon(); // otherwise we lose sbID |
| 1169 } | 1178 } |
| 1170 } | 1179 } |
| 1171 GL_CALL(DeleteRenderbuffers(1, &sbID)); | 1180 GL_CALL(DeleteRenderbuffers(1, &sbID)); |
| 1172 return false; | 1181 return false; |
| 1173 } | 1182 } |
| 1174 | 1183 |
| 1175 bool GrGpuGL::attachStencilBufferToRenderTarget(GrStencilBuffer* sb, | 1184 bool GrGpuGL::attachStencilBufferToRenderTarget(GrStencilBuffer* sb, GrRenderTar
get* rt) { |
| 1176 GrRenderTarget* rt) { | |
| 1177 GrGLRenderTarget* glrt = (GrGLRenderTarget*) rt; | 1185 GrGLRenderTarget* glrt = (GrGLRenderTarget*) rt; |
| 1178 | 1186 |
| 1179 GrGLuint fbo = glrt->renderFBOID(); | 1187 GrGLuint fbo = glrt->renderFBOID(); |
| 1180 | 1188 |
| 1181 if (NULL == sb) { | 1189 if (NULL == sb) { |
| 1182 if (NULL != rt->getStencilBuffer()) { | 1190 if (NULL != rt->getStencilBuffer()) { |
| 1183 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 1191 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
| 1184 GR_GL_STENCIL_ATTACHMENT, | 1192 GR_GL_STENCIL_ATTACHMENT, |
| 1185 GR_GL_RENDERBUFFER, 0)); | 1193 GR_GL_RENDERBUFFER, 0)); |
| 1186 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 1194 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
| 1187 GR_GL_DEPTH_ATTACHMENT, | 1195 GR_GL_DEPTH_ATTACHMENT, |
| 1188 GR_GL_RENDERBUFFER, 0)); | 1196 GR_GL_RENDERBUFFER, 0)); |
| 1189 #if GR_DEBUG | 1197 #if GR_DEBUG |
| 1190 GrGLenum status; | 1198 GrGLenum status; |
| 1191 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); | 1199 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); |
| 1192 GrAssert(GR_GL_FRAMEBUFFER_COMPLETE == status); | 1200 GrAssert(GR_GL_FRAMEBUFFER_COMPLETE == status); |
| 1193 #endif | 1201 #endif |
| 1194 } | 1202 } |
| 1195 return true; | 1203 return true; |
| 1196 } else { | 1204 } else { |
| 1197 GrGLStencilBuffer* glsb = (GrGLStencilBuffer*) sb; | 1205 GrGLStencilBuffer* glsb = static_cast<GrGLStencilBuffer*>(sb); |
| 1198 GrGLuint rb = glsb->renderbufferID(); | 1206 GrGLuint rb = glsb->renderbufferID(); |
| 1199 | 1207 |
| 1200 fHWBoundRenderTarget = NULL; | 1208 fHWBoundRenderTarget = NULL; |
| 1201 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, fbo)); | 1209 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, fbo)); |
| 1202 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 1210 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
| 1203 GR_GL_STENCIL_ATTACHMENT, | 1211 GR_GL_STENCIL_ATTACHMENT, |
| 1204 GR_GL_RENDERBUFFER, rb)); | 1212 GR_GL_RENDERBUFFER, rb)); |
| 1205 if (glsb->format().fPacked) { | 1213 if (glsb->format().fPacked) { |
| 1206 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 1214 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
| 1207 GR_GL_DEPTH_ATTACHMENT, | 1215 GR_GL_DEPTH_ATTACHMENT, |
| 1208 GR_GL_RENDERBUFFER, rb)); | 1216 GR_GL_RENDERBUFFER, rb)); |
| 1209 } else { | 1217 } else { |
| 1210 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 1218 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
| 1211 GR_GL_DEPTH_ATTACHMENT, | 1219 GR_GL_DEPTH_ATTACHMENT, |
| 1212 GR_GL_RENDERBUFFER, 0)); | 1220 GR_GL_RENDERBUFFER, 0)); |
| 1213 } | 1221 } |
| 1214 | 1222 |
| 1215 GrGLenum status; | 1223 GrGLenum status; |
| 1216 if (!this->glCaps().isColorConfigAndStencilFormatVerified(rt->config(), | 1224 if (!this->glCaps().isColorConfigAndStencilFormatVerified(rt->config(),
glsb->format())) { |
| 1217 glsb->format())) { | |
| 1218 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); | 1225 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); |
| 1219 if (status != GR_GL_FRAMEBUFFER_COMPLETE) { | 1226 if (status != GR_GL_FRAMEBUFFER_COMPLETE) { |
| 1220 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 1227 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
| 1221 GR_GL_STENCIL_ATTACHMENT, | 1228 GR_GL_STENCIL_ATTACHMENT, |
| 1222 GR_GL_RENDERBUFFER, 0)); | 1229 GR_GL_RENDERBUFFER, 0)); |
| 1223 if (glsb->format().fPacked) { | 1230 if (glsb->format().fPacked) { |
| 1224 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, | 1231 GL_CALL(FramebufferRenderbuffer(GR_GL_FRAMEBUFFER, |
| 1225 GR_GL_DEPTH_ATTACHMENT, | 1232 GR_GL_DEPTH_ATTACHMENT, |
| 1226 GR_GL_RENDERBUFFER, 0)); | 1233 GR_GL_RENDERBUFFER, 0)); |
| 1227 } | 1234 } |
| (...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1760 default: | 1767 default: |
| 1761 // Only the above two fill rules are allowed. | 1768 // Only the above two fill rules are allowed. |
| 1762 GrCrash("Unexpected path fill."); | 1769 GrCrash("Unexpected path fill."); |
| 1763 return; // suppress unused var warning. | 1770 return; // suppress unused var warning. |
| 1764 } | 1771 } |
| 1765 GrGLint writeMask = fStencilSettings.writeMask(GrStencilSettings::kFront_Fac
e); | 1772 GrGLint writeMask = fStencilSettings.writeMask(GrStencilSettings::kFront_Fac
e); |
| 1766 GL_CALL(StencilFillPath(id, fillMode, writeMask)); | 1773 GL_CALL(StencilFillPath(id, fillMode, writeMask)); |
| 1767 } | 1774 } |
| 1768 | 1775 |
| 1769 void GrGpuGL::onResolveRenderTarget(GrRenderTarget* target) { | 1776 void GrGpuGL::onResolveRenderTarget(GrRenderTarget* target) { |
| 1777 GrGLRenderTarget* rt = static_cast<GrGLRenderTarget*>(target); |
| 1778 if (rt->needsResolve()) { |
| 1779 // The IMG extension automatically resolves the texture when it is read. |
| 1780 if (GrGLCaps::kImaginationES_MSFBOType != this->glCaps().msFBOType()) { |
| 1781 GrAssert(GrGLCaps::kNone_MSFBOType != this->glCaps().msFBOType()); |
| 1782 GrAssert(rt->textureFBOID() != rt->renderFBOID()); |
| 1783 GL_CALL(BindFramebuffer(GR_GL_READ_FRAMEBUFFER, rt->renderFBOID())); |
| 1784 GL_CALL(BindFramebuffer(GR_GL_DRAW_FRAMEBUFFER, rt->textureFBOID()))
; |
| 1785 // make sure we go through flushRenderTarget() since we've modified |
| 1786 // the bound DRAW FBO ID. |
| 1787 fHWBoundRenderTarget = NULL; |
| 1788 const GrGLIRect& vp = rt->getViewport(); |
| 1789 const GrIRect dirtyRect = rt->getResolveRect(); |
| 1790 GrGLIRect r; |
| 1791 r.setRelativeTo(vp, dirtyRect.fLeft, dirtyRect.fTop, |
| 1792 dirtyRect.width(), dirtyRect.height(), target->origi
n()); |
| 1770 | 1793 |
| 1771 GrGLRenderTarget* rt = static_cast<GrGLRenderTarget*>(target); | 1794 GrAutoTRestore<ScissorState> asr; |
| 1772 | 1795 if (GrGLCaps::kAppleES_MSFBOType == this->glCaps().msFBOType()) { |
| 1773 if (rt->needsResolve()) { | 1796 // Apple's extension uses the scissor as the blit bounds. |
| 1774 GrAssert(GrGLCaps::kNone_MSFBOType != this->glCaps().msFBOType()); | |
| 1775 GrAssert(rt->textureFBOID() != rt->renderFBOID()); | |
| 1776 GL_CALL(BindFramebuffer(GR_GL_READ_FRAMEBUFFER, | |
| 1777 rt->renderFBOID())); | |
| 1778 GL_CALL(BindFramebuffer(GR_GL_DRAW_FRAMEBUFFER, | |
| 1779 rt->textureFBOID())); | |
| 1780 // make sure we go through flushRenderTarget() since we've modified | |
| 1781 // the bound DRAW FBO ID. | |
| 1782 fHWBoundRenderTarget = NULL; | |
| 1783 const GrGLIRect& vp = rt->getViewport(); | |
| 1784 const GrIRect dirtyRect = rt->getResolveRect(); | |
| 1785 GrGLIRect r; | |
| 1786 r.setRelativeTo(vp, dirtyRect.fLeft, dirtyRect.fTop, | |
| 1787 dirtyRect.width(), dirtyRect.height(), target->origin())
; | |
| 1788 | |
| 1789 GrAutoTRestore<ScissorState> asr; | |
| 1790 if (GrGLCaps::kAppleES_MSFBOType == this->glCaps().msFBOType()) { | |
| 1791 // Apple's extension uses the scissor as the blit bounds. | |
| 1792 asr.reset(&fScissorState); | |
| 1793 fScissorState.fEnabled = true; | |
| 1794 fScissorState.fRect = dirtyRect; | |
| 1795 this->flushScissor(); | |
| 1796 GL_CALL(ResolveMultisampleFramebuffer()); | |
| 1797 } else { | |
| 1798 if (GrGLCaps::kDesktopARB_MSFBOType != this->glCaps().msFBOType()) { | |
| 1799 // this respects the scissor during the blit, so disable it. | |
| 1800 GrAssert(GrGLCaps::kDesktopEXT_MSFBOType == | |
| 1801 this->glCaps().msFBOType()); | |
| 1802 asr.reset(&fScissorState); | 1797 asr.reset(&fScissorState); |
| 1803 fScissorState.fEnabled = false; | 1798 fScissorState.fEnabled = true; |
| 1799 fScissorState.fRect = dirtyRect; |
| 1804 this->flushScissor(); | 1800 this->flushScissor(); |
| 1801 GL_CALL(ResolveMultisampleFramebuffer()); |
| 1802 } else { |
| 1803 if (GrGLCaps::kDesktopARB_MSFBOType != this->glCaps().msFBOType(
)) { |
| 1804 // this respects the scissor during the blit, so disable it. |
| 1805 GrAssert(GrGLCaps::kDesktopEXT_MSFBOType == this->glCaps().m
sFBOType()); |
| 1806 asr.reset(&fScissorState); |
| 1807 fScissorState.fEnabled = false; |
| 1808 this->flushScissor(); |
| 1809 } |
| 1810 int right = r.fLeft + r.fWidth; |
| 1811 int top = r.fBottom + r.fHeight; |
| 1812 GL_CALL(BlitFramebuffer(r.fLeft, r.fBottom, right, top, |
| 1813 r.fLeft, r.fBottom, right, top, |
| 1814 GR_GL_COLOR_BUFFER_BIT, GR_GL_NEAREST)); |
| 1805 } | 1815 } |
| 1806 int right = r.fLeft + r.fWidth; | |
| 1807 int top = r.fBottom + r.fHeight; | |
| 1808 GL_CALL(BlitFramebuffer(r.fLeft, r.fBottom, right, top, | |
| 1809 r.fLeft, r.fBottom, right, top, | |
| 1810 GR_GL_COLOR_BUFFER_BIT, GR_GL_NEAREST)); | |
| 1811 } | 1816 } |
| 1812 rt->flagAsResolved(); | 1817 rt->flagAsResolved(); |
| 1813 } | 1818 } |
| 1814 } | 1819 } |
| 1815 | 1820 |
| 1816 namespace { | 1821 namespace { |
| 1817 | 1822 |
| 1818 GrGLenum gr_to_gl_stencil_func(GrStencilFunc basicFunc) { | 1823 GrGLenum gr_to_gl_stencil_func(GrStencilFunc basicFunc) { |
| 1819 static const GrGLenum gTable[] = { | 1824 static const GrGLenum gTable[] = { |
| 1820 GR_GL_ALWAYS, // kAlways_StencilFunc | 1825 GR_GL_ALWAYS, // kAlways_StencilFunc |
| (...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2342 this->setVertexArrayID(gpu, 0); | 2347 this->setVertexArrayID(gpu, 0); |
| 2343 } | 2348 } |
| 2344 int attrCount = gpu->glCaps().maxVertexAttributes(); | 2349 int attrCount = gpu->glCaps().maxVertexAttributes(); |
| 2345 if (fDefaultVertexArrayAttribState.count() != attrCount) { | 2350 if (fDefaultVertexArrayAttribState.count() != attrCount) { |
| 2346 fDefaultVertexArrayAttribState.resize(attrCount); | 2351 fDefaultVertexArrayAttribState.resize(attrCount); |
| 2347 } | 2352 } |
| 2348 attribState = &fDefaultVertexArrayAttribState; | 2353 attribState = &fDefaultVertexArrayAttribState; |
| 2349 } | 2354 } |
| 2350 return attribState; | 2355 return attribState; |
| 2351 } | 2356 } |
| OLD | NEW |