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 2770 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2781 | 2781 |
2782 GrGLAttribArrayState* GrGpuGL::HWGeometryState::bindArrayAndBuffersToDraw( | 2782 GrGLAttribArrayState* GrGpuGL::HWGeometryState::bindArrayAndBuffersToDraw( |
2783 GrGpuGL* gpu, | 2783 GrGpuGL* gpu, |
2784 const GrGLVertexBuffer* vbuffer, | 2784 const GrGLVertexBuffer* vbuffer, |
2785 const GrGLIndexBuffer* ibuffer)
{ | 2785 const GrGLIndexBuffer* ibuffer)
{ |
2786 SkASSERT(NULL != vbuffer); | 2786 SkASSERT(NULL != vbuffer); |
2787 GrGLAttribArrayState* attribState; | 2787 GrGLAttribArrayState* attribState; |
2788 | 2788 |
2789 // We use a vertex array if we're on a core profile and the verts are in a V
BO. | 2789 // We use a vertex array if we're on a core profile and the verts are in a V
BO. |
2790 if (gpu->glCaps().isCoreProfile() && !vbuffer->isCPUBacked()) { | 2790 if (gpu->glCaps().isCoreProfile() && !vbuffer->isCPUBacked()) { |
2791 if (NULL == fVBOVertexArray || !fVBOVertexArray->isValid()) { | 2791 if (NULL == fVBOVertexArray || fVBOVertexArray->wasDestroyed()) { |
2792 SkSafeUnref(fVBOVertexArray); | 2792 SkSafeUnref(fVBOVertexArray); |
2793 GrGLuint arrayID; | 2793 GrGLuint arrayID; |
2794 GR_GL_CALL(gpu->glInterface(), GenVertexArrays(1, &arrayID)); | 2794 GR_GL_CALL(gpu->glInterface(), GenVertexArrays(1, &arrayID)); |
2795 int attrCount = gpu->glCaps().maxVertexAttributes(); | 2795 int attrCount = gpu->glCaps().maxVertexAttributes(); |
2796 fVBOVertexArray = SkNEW_ARGS(GrGLVertexArray, (gpu, arrayID, attrCou
nt)); | 2796 fVBOVertexArray = SkNEW_ARGS(GrGLVertexArray, (gpu, arrayID, attrCou
nt)); |
2797 } | 2797 } |
2798 attribState = fVBOVertexArray->bindWithIndexBuffer(ibuffer); | 2798 attribState = fVBOVertexArray->bindWithIndexBuffer(ibuffer); |
2799 } else { | 2799 } else { |
2800 if (NULL != ibuffer) { | 2800 if (NULL != ibuffer) { |
2801 this->setIndexBufferIDOnDefaultVertexArray(gpu, ibuffer->bufferID())
; | 2801 this->setIndexBufferIDOnDefaultVertexArray(gpu, ibuffer->bufferID())
; |
2802 } else { | 2802 } else { |
2803 this->setVertexArrayID(gpu, 0); | 2803 this->setVertexArrayID(gpu, 0); |
2804 } | 2804 } |
2805 int attrCount = gpu->glCaps().maxVertexAttributes(); | 2805 int attrCount = gpu->glCaps().maxVertexAttributes(); |
2806 if (fDefaultVertexArrayAttribState.count() != attrCount) { | 2806 if (fDefaultVertexArrayAttribState.count() != attrCount) { |
2807 fDefaultVertexArrayAttribState.resize(attrCount); | 2807 fDefaultVertexArrayAttribState.resize(attrCount); |
2808 } | 2808 } |
2809 attribState = &fDefaultVertexArrayAttribState; | 2809 attribState = &fDefaultVertexArrayAttribState; |
2810 } | 2810 } |
2811 return attribState; | 2811 return attribState; |
2812 } | 2812 } |
OLD | NEW |