Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: src/gpu/gl/GrGpuGL.cpp

Issue 16452007: Use all available texture units. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: use fHWBoundTextures->count() rather than glCaps()->maxFragmentTextureUnits() Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/gpu/gl/GrGpuGL.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
11 #include "GrGLPath.h" 11 #include "GrGLPath.h"
12 #include "GrGLShaderBuilder.h" 12 #include "GrGLShaderBuilder.h"
13 #include "GrTemplates.h" 13 #include "GrTemplates.h"
14 #include "GrTypes.h" 14 #include "GrTypes.h"
15 #include "SkTemplates.h" 15 #include "SkTemplates.h"
16 16
17 static const GrGLuint GR_MAX_GLUINT = ~0U; 17 static const GrGLuint GR_MAX_GLUINT = ~0U;
18 static const GrGLint GR_INVAL_GLINT = ~0; 18 static const GrGLint GR_INVAL_GLINT = ~0;
19 19
20 #define GL_CALL(X) GR_GL_CALL(this->glInterface(), X) 20 #define GL_CALL(X) GR_GL_CALL(this->glInterface(), X)
21 #define GL_CALL_RET(RET, X) GR_GL_CALL_RET(this->glInterface(), RET, X) 21 #define GL_CALL_RET(RET, X) GR_GL_CALL_RET(this->glInterface(), RET, X)
22 22
23 // we use a spare texture unit to avoid
24 // mucking with the state of any of the stages.
25 static const int SPARE_TEX_UNIT = GrDrawState::kNumStages;
26 23
27 #define SKIP_CACHE_CHECK true 24 #define SKIP_CACHE_CHECK true
28 25
29 #if GR_GL_CHECK_ALLOC_WITH_GET_ERROR 26 #if GR_GL_CHECK_ALLOC_WITH_GET_ERROR
30 #define CLEAR_ERROR_BEFORE_ALLOC(iface) GrGLClearErr(iface) 27 #define CLEAR_ERROR_BEFORE_ALLOC(iface) GrGLClearErr(iface)
31 #define GL_ALLOC_CALL(iface, call) GR_GL_CALL_NOERRCHECK(iface, call) 28 #define GL_ALLOC_CALL(iface, call) GR_GL_CALL_NOERRCHECK(iface, call)
32 #define CHECK_ALLOC_ERROR(iface) GR_GL_GET_ERROR(iface) 29 #define CHECK_ALLOC_ERROR(iface) GR_GL_GET_ERROR(iface)
33 #else 30 #else
34 #define CLEAR_ERROR_BEFORE_ALLOC(iface) 31 #define CLEAR_ERROR_BEFORE_ALLOC(iface)
35 #define GL_ALLOC_CALL(iface, call) GR_GL_CALL(iface, call) 32 #define GL_ALLOC_CALL(iface, call) GR_GL_CALL(iface, call)
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 108
112 // assertion for gXfermodeCoeff2Blend have to be in GrGpu scope 109 // assertion for gXfermodeCoeff2Blend have to be in GrGpu scope
113 GR_STATIC_ASSERT(kTotalGrBlendCoeffCount == 110 GR_STATIC_ASSERT(kTotalGrBlendCoeffCount ==
114 GR_ARRAY_COUNT(gXfermodeCoeff2Blend)); 111 GR_ARRAY_COUNT(gXfermodeCoeff2Blend));
115 } 112 }
116 113
117 /////////////////////////////////////////////////////////////////////////////// 114 ///////////////////////////////////////////////////////////////////////////////
118 115
119 static bool gPrintStartupSpew; 116 static bool gPrintStartupSpew;
120 117
121 static bool fbo_test(const GrGLInterface* gl, int w, int h) {
122
123 GR_GL_CALL(gl, ActiveTexture(GR_GL_TEXTURE0 + SPARE_TEX_UNIT));
124
125 GrGLuint testFBO;
126 GR_GL_CALL(gl, GenFramebuffers(1, &testFBO));
127 GR_GL_CALL(gl, BindFramebuffer(GR_GL_FRAMEBUFFER, testFBO));
128 GrGLuint testRTTex;
129 GR_GL_CALL(gl, GenTextures(1, &testRTTex));
130 GR_GL_CALL(gl, BindTexture(GR_GL_TEXTURE_2D, testRTTex));
131 // some implementations require texture to be mip-map complete before
132 // FBO with level 0 bound as color attachment will be framebuffer complete.
133 GR_GL_CALL(gl, TexParameteri(GR_GL_TEXTURE_2D,
134 GR_GL_TEXTURE_MIN_FILTER,
135 GR_GL_NEAREST));
136 GR_GL_CALL(gl, TexImage2D(GR_GL_TEXTURE_2D, 0, GR_GL_RGBA, w, h,
137 0, GR_GL_RGBA, GR_GL_UNSIGNED_BYTE, NULL));
138 GR_GL_CALL(gl, BindTexture(GR_GL_TEXTURE_2D, 0));
139 GR_GL_CALL(gl, FramebufferTexture2D(GR_GL_FRAMEBUFFER,
140 GR_GL_COLOR_ATTACHMENT0,
141 GR_GL_TEXTURE_2D, testRTTex, 0));
142 GrGLenum status;
143 GR_GL_CALL_RET(gl, status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER));
144 GR_GL_CALL(gl, DeleteFramebuffers(1, &testFBO));
145 GR_GL_CALL(gl, DeleteTextures(1, &testRTTex));
146
147 return status == GR_GL_FRAMEBUFFER_COMPLETE;
148 }
149
150 GrGpuGL::GrGpuGL(const GrGLContext& ctx, GrContext* context) 118 GrGpuGL::GrGpuGL(const GrGLContext& ctx, GrContext* context)
151 : GrGpu(context) 119 : GrGpu(context)
152 , fGLContext(ctx) { 120 , fGLContext(ctx) {
153 121
154 GrAssert(ctx.isInitialized()); 122 GrAssert(ctx.isInitialized());
155 123
156 fCaps.reset(SkRef(ctx.info().caps())); 124 fCaps.reset(SkRef(ctx.info().caps()));
157 125
126 fHWBoundTextures.reset(ctx.info().caps()->maxFragmentTextureUnits());
127
158 fillInConfigRenderableTable(); 128 fillInConfigRenderableTable();
159 129
160 130
161 GrGLClearErr(fGLContext.interface()); 131 GrGLClearErr(fGLContext.interface());
162 132
163 if (gPrintStartupSpew) { 133 if (gPrintStartupSpew) {
164 const GrGLubyte* vendor; 134 const GrGLubyte* vendor;
165 const GrGLubyte* renderer; 135 const GrGLubyte* renderer;
166 const GrGLubyte* version; 136 const GrGLubyte* version;
167 GL_CALL_RET(vendor, GetString(GR_GL_VENDOR)); 137 GL_CALL_RET(vendor, GetString(GR_GL_VENDOR));
168 GL_CALL_RET(renderer, GetString(GR_GL_RENDERER)); 138 GL_CALL_RET(renderer, GetString(GR_GL_RENDERER));
169 GL_CALL_RET(version, GetString(GR_GL_VERSION)); 139 GL_CALL_RET(version, GetString(GR_GL_VERSION));
170 GrPrintf("------------------------- create GrGpuGL %p --------------\n", 140 GrPrintf("------------------------- create GrGpuGL %p --------------\n",
171 this); 141 this);
172 GrPrintf("------ VENDOR %s\n", vendor); 142 GrPrintf("------ VENDOR %s\n", vendor);
173 GrPrintf("------ RENDERER %s\n", renderer); 143 GrPrintf("------ RENDERER %s\n", renderer);
174 GrPrintf("------ VERSION %s\n", version); 144 GrPrintf("------ VERSION %s\n", version);
175 GrPrintf("------ EXTENSIONS\n"); 145 GrPrintf("------ EXTENSIONS\n");
176 ctx.info().extensions().print(); 146 ctx.info().extensions().print();
177 GrPrintf("\n"); 147 GrPrintf("\n");
178 ctx.info().caps()->print(); 148 ctx.info().caps()->print();
179 } 149 }
180 150
181 fProgramCache = SkNEW_ARGS(ProgramCache, (this->glContext())); 151 fProgramCache = SkNEW_ARGS(ProgramCache, (this->glContext()));
182 152
183 GrAssert(this->glCaps().maxVertexAttributes() >= GrDrawState::kMaxVertexAttr ibCnt); 153 GrAssert(this->glCaps().maxVertexAttributes() >= GrDrawState::kMaxVertexAttr ibCnt);
184 154
185 fLastSuccessfulStencilFmtIdx = 0; 155 fLastSuccessfulStencilFmtIdx = 0;
186 if (false) { // avoid bit rot, suppress warning
187 fbo_test(this->glInterface(), 0, 0);
188 }
189 } 156 }
190 157
191 GrGpuGL::~GrGpuGL() { 158 GrGpuGL::~GrGpuGL() {
192 if (0 != fHWProgramID) { 159 if (0 != fHWProgramID) {
193 // detach the current program so there is no confusion on OpenGL's part 160 // detach the current program so there is no confusion on OpenGL's part
194 // that we want it to be deleted 161 // that we want it to be deleted
195 GrAssert(fHWProgramID == fCurrentProgram->programID()); 162 GrAssert(fHWProgramID == fCurrentProgram->programID());
196 GL_CALL(UseProgram(0)); 163 GL_CALL(UseProgram(0));
197 } 164 }
198 165
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 fHWWriteToColor = kUnknown_TriState; 321 fHWWriteToColor = kUnknown_TriState;
355 322
356 // we only ever use lines in hairline mode 323 // we only ever use lines in hairline mode
357 GL_CALL(LineWidth(1)); 324 GL_CALL(LineWidth(1));
358 325
359 // invalid 326 // invalid
360 fHWActiveTextureUnitIdx = -1; 327 fHWActiveTextureUnitIdx = -1;
361 328
362 fHWBlendState.invalidate(); 329 fHWBlendState.invalidate();
363 330
364 for (int s = 0; s < GrDrawState::kNumStages; ++s) { 331 for (int s = 0; s < fHWBoundTextures.count(); ++s) {
365 fHWBoundTextures[s] = NULL; 332 fHWBoundTextures[s] = NULL;
366 } 333 }
367 334
368 fHWScissorSettings.invalidate(); 335 fHWScissorSettings.invalidate();
369 336
370 fHWViewport.invalidate(); 337 fHWViewport.invalidate();
371 338
372 fHWStencilSettings.invalidate(); 339 fHWStencilSettings.invalidate();
373 fHWStencilTestEnabled = kUnknown_TriState; 340 fHWStencilTestEnabled = kUnknown_TriState;
374 341
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 return NULL; 433 return NULL;
467 } 434 }
468 texture = SkNEW_ARGS(GrGLTexture, (this, glTexDesc, glRTDesc)); 435 texture = SkNEW_ARGS(GrGLTexture, (this, glTexDesc, glRTDesc));
469 } else { 436 } else {
470 texture = SkNEW_ARGS(GrGLTexture, (this, glTexDesc)); 437 texture = SkNEW_ARGS(GrGLTexture, (this, glTexDesc));
471 } 438 }
472 if (NULL == texture) { 439 if (NULL == texture) {
473 return NULL; 440 return NULL;
474 } 441 }
475 442
476 this->setSpareTextureUnit();
477 return texture; 443 return texture;
478 } 444 }
479 445
480 GrRenderTarget* GrGpuGL::onWrapBackendRenderTarget(const GrBackendRenderTargetDe sc& desc) { 446 GrRenderTarget* GrGpuGL::onWrapBackendRenderTarget(const GrBackendRenderTargetDe sc& desc) {
481 GrGLRenderTarget::Desc glDesc; 447 GrGLRenderTarget::Desc glDesc;
482 glDesc.fConfig = desc.fConfig; 448 glDesc.fConfig = desc.fConfig;
483 glDesc.fRTFBOID = static_cast<GrGLuint>(desc.fRenderTargetHandle); 449 glDesc.fRTFBOID = static_cast<GrGLuint>(desc.fRenderTargetHandle);
484 glDesc.fMSColorRenderbufferID = 0; 450 glDesc.fMSColorRenderbufferID = 0;
485 glDesc.fTexFBOID = GrGLRenderTarget::kUnresolvableFBOID; 451 glDesc.fTexFBOID = GrGLRenderTarget::kUnresolvableFBOID;
486 glDesc.fSampleCnt = desc.fSampleCnt; 452 glDesc.fSampleCnt = desc.fSampleCnt;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 486
521 bool GrGpuGL::onWriteTexturePixels(GrTexture* texture, 487 bool GrGpuGL::onWriteTexturePixels(GrTexture* texture,
522 int left, int top, int width, int height, 488 int left, int top, int width, int height,
523 GrPixelConfig config, const void* buffer, 489 GrPixelConfig config, const void* buffer,
524 size_t rowBytes) { 490 size_t rowBytes) {
525 if (NULL == buffer) { 491 if (NULL == buffer) {
526 return false; 492 return false;
527 } 493 }
528 GrGLTexture* glTex = static_cast<GrGLTexture*>(texture); 494 GrGLTexture* glTex = static_cast<GrGLTexture*>(texture);
529 495
530 this->setSpareTextureUnit(); 496 this->setScratchTextureUnit();
531 GL_CALL(BindTexture(GR_GL_TEXTURE_2D, glTex->textureID())); 497 GL_CALL(BindTexture(GR_GL_TEXTURE_2D, glTex->textureID()));
532 GrGLTexture::Desc desc; 498 GrGLTexture::Desc desc;
533 desc.fFlags = glTex->desc().fFlags; 499 desc.fFlags = glTex->desc().fFlags;
534 desc.fWidth = glTex->width(); 500 desc.fWidth = glTex->width();
535 desc.fHeight = glTex->height(); 501 desc.fHeight = glTex->height();
536 desc.fConfig = glTex->config(); 502 desc.fConfig = glTex->config();
537 desc.fSampleCnt = glTex->desc().fSampleCnt; 503 desc.fSampleCnt = glTex->desc().fSampleCnt;
538 desc.fTextureID = glTex->textureID(); 504 desc.fTextureID = glTex->textureID();
539 desc.fOrigin = glTex->origin(); 505 desc.fOrigin = glTex->origin();
540 506
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 if (renderTarget && this->glCaps().textureUsageSupport()) { 911 if (renderTarget && this->glCaps().textureUsageSupport()) {
946 // provides a hint about how this texture will be used 912 // provides a hint about how this texture will be used
947 GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, 913 GL_CALL(TexParameteri(GR_GL_TEXTURE_2D,
948 GR_GL_TEXTURE_USAGE, 914 GR_GL_TEXTURE_USAGE,
949 GR_GL_FRAMEBUFFER_ATTACHMENT)); 915 GR_GL_FRAMEBUFFER_ATTACHMENT));
950 } 916 }
951 if (!glTexDesc.fTextureID) { 917 if (!glTexDesc.fTextureID) {
952 return return_null_texture(); 918 return return_null_texture();
953 } 919 }
954 920
955 this->setSpareTextureUnit(); 921 this->setScratchTextureUnit();
956 GL_CALL(BindTexture(GR_GL_TEXTURE_2D, glTexDesc.fTextureID)); 922 GL_CALL(BindTexture(GR_GL_TEXTURE_2D, glTexDesc.fTextureID));
957 923
958 // Some drivers like to know filter/wrap before seeing glTexImage2D. Some 924 // Some drivers like to know filter/wrap before seeing glTexImage2D. Some
959 // drivers have a bug where an FBO won't be complete if it includes a 925 // drivers have a bug where an FBO won't be complete if it includes a
960 // texture that is not mipmap complete (considering the filter in use). 926 // texture that is not mipmap complete (considering the filter in use).
961 GrGLTexture::TexParams initialTexParams; 927 GrGLTexture::TexParams initialTexParams;
962 // we only set a subset here so invalidate first 928 // we only set a subset here so invalidate first
963 initialTexParams.invalidate(); 929 initialTexParams.invalidate();
964 initialTexParams.fFilter = GR_GL_NEAREST; 930 initialTexParams.fFilter = GR_GL_NEAREST;
965 initialTexParams.fWrapS = GR_GL_CLAMP_TO_EDGE; 931 initialTexParams.fWrapS = GR_GL_CLAMP_TO_EDGE;
(...skipping 1129 matching lines...) Expand 10 before | Expand all | Expand 10 after
2095 } 2061 }
2096 2062
2097 void GrGpuGL::notifyRenderTargetDelete(GrRenderTarget* renderTarget) { 2063 void GrGpuGL::notifyRenderTargetDelete(GrRenderTarget* renderTarget) {
2098 GrAssert(NULL != renderTarget); 2064 GrAssert(NULL != renderTarget);
2099 if (fHWBoundRenderTarget == renderTarget) { 2065 if (fHWBoundRenderTarget == renderTarget) {
2100 fHWBoundRenderTarget = NULL; 2066 fHWBoundRenderTarget = NULL;
2101 } 2067 }
2102 } 2068 }
2103 2069
2104 void GrGpuGL::notifyTextureDelete(GrGLTexture* texture) { 2070 void GrGpuGL::notifyTextureDelete(GrGLTexture* texture) {
2105 for (int s = 0; s < GrDrawState::kNumStages; ++s) { 2071 for (int s = 0; s < fHWBoundTextures.count(); ++s) {
2106 if (fHWBoundTextures[s] == texture) { 2072 if (fHWBoundTextures[s] == texture) {
2107 // deleting bound texture does implied bind to 0 2073 // deleting bound texture does implied bind to 0
2108 fHWBoundTextures[s] = NULL; 2074 fHWBoundTextures[s] = NULL;
2109 } 2075 }
2110 } 2076 }
2111 } 2077 }
2112 2078
2113 bool GrGpuGL::configToGLFormats(GrPixelConfig config, 2079 bool GrGpuGL::configToGLFormats(GrPixelConfig config,
2114 bool getSizedInternalFormat, 2080 bool getSizedInternalFormat,
2115 GrGLenum* internalFormat, 2081 GrGLenum* internalFormat,
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
2215 *externalType = GR_GL_UNSIGNED_BYTE; 2181 *externalType = GR_GL_UNSIGNED_BYTE;
2216 } 2182 }
2217 break; 2183 break;
2218 default: 2184 default:
2219 return false; 2185 return false;
2220 } 2186 }
2221 return true; 2187 return true;
2222 } 2188 }
2223 2189
2224 void GrGpuGL::setTextureUnit(int unit) { 2190 void GrGpuGL::setTextureUnit(int unit) {
2225 GrAssert(unit >= 0 && unit < GrDrawState::kNumStages); 2191 GrAssert(unit >= 0 && unit < fHWBoundTextures.count());
2226 if (fHWActiveTextureUnitIdx != unit) { 2192 if (unit != fHWActiveTextureUnitIdx) {
2227 GL_CALL(ActiveTexture(GR_GL_TEXTURE0 + unit)); 2193 GL_CALL(ActiveTexture(GR_GL_TEXTURE0 + unit));
2228 fHWActiveTextureUnitIdx = unit; 2194 fHWActiveTextureUnitIdx = unit;
2229 } 2195 }
2230 } 2196 }
2231 2197
2232 void GrGpuGL::setSpareTextureUnit() { 2198 void GrGpuGL::setScratchTextureUnit() {
2233 if (fHWActiveTextureUnitIdx != (GR_GL_TEXTURE0 + SPARE_TEX_UNIT)) { 2199 // Bind the last texture unit since it is the least likely to be used by GrG LProgram.
2234 GL_CALL(ActiveTexture(GR_GL_TEXTURE0 + SPARE_TEX_UNIT)); 2200 int lastUnitIdx = fHWBoundTextures.count() - 1;
2235 fHWActiveTextureUnitIdx = SPARE_TEX_UNIT; 2201 if (lastUnitIdx != fHWActiveTextureUnitIdx) {
2202 GL_CALL(ActiveTexture(GR_GL_TEXTURE0 + lastUnitIdx));
2203 fHWActiveTextureUnitIdx = lastUnitIdx;
2236 } 2204 }
2205 // clear out the this field so that if a program does use this unit it will rebind the correct
2206 // texture.
2207 fHWBoundTextures[lastUnitIdx] = NULL;
2237 } 2208 }
2238 2209
2239 namespace { 2210 namespace {
2240 // Determines whether glBlitFramebuffer could be used between src and dst. 2211 // Determines whether glBlitFramebuffer could be used between src and dst.
2241 inline bool can_blit_framebuffer(const GrSurface* dst, 2212 inline bool can_blit_framebuffer(const GrSurface* dst,
2242 const GrSurface* src, 2213 const GrSurface* src,
2243 const GrGpuGL* gpu, 2214 const GrGpuGL* gpu,
2244 bool* wouldNeedTempFBO = NULL) { 2215 bool* wouldNeedTempFBO = NULL) {
2245 if (gpu->isConfigRenderable(dst->config()) && 2216 if (gpu->isConfigRenderable(dst->config()) &&
2246 gpu->isConfigRenderable(src->config()) && 2217 gpu->isConfigRenderable(src->config()) &&
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
2363 // We modified the bound FBO 2334 // We modified the bound FBO
2364 fHWBoundRenderTarget = NULL; 2335 fHWBoundRenderTarget = NULL;
2365 GrGLIRect srcGLRect; 2336 GrGLIRect srcGLRect;
2366 srcGLRect.setRelativeTo(srcVP, 2337 srcGLRect.setRelativeTo(srcVP,
2367 srcRect.fLeft, 2338 srcRect.fLeft,
2368 srcRect.fTop, 2339 srcRect.fTop,
2369 srcRect.width(), 2340 srcRect.width(),
2370 srcRect.height(), 2341 srcRect.height(),
2371 src->origin()); 2342 src->origin());
2372 2343
2373 this->setSpareTextureUnit(); 2344 this->setScratchTextureUnit();
2374 GL_CALL(BindTexture(GR_GL_TEXTURE_2D, dstTex->textureID())); 2345 GL_CALL(BindTexture(GR_GL_TEXTURE_2D, dstTex->textureID()));
2375 GrGLint dstY; 2346 GrGLint dstY;
2376 if (kBottomLeft_GrSurfaceOrigin == dst->origin()) { 2347 if (kBottomLeft_GrSurfaceOrigin == dst->origin()) {
2377 dstY = dst->height() - (dstPoint.fY + srcGLRect.fHeight); 2348 dstY = dst->height() - (dstPoint.fY + srcGLRect.fHeight);
2378 } else { 2349 } else {
2379 dstY = dstPoint.fY; 2350 dstY = dstPoint.fY;
2380 } 2351 }
2381 GL_CALL(CopyTexSubImage2D(GR_GL_TEXTURE_2D, 0, 2352 GL_CALL(CopyTexSubImage2D(GR_GL_TEXTURE_2D, 0,
2382 dstPoint.fX, dstY, 2353 dstPoint.fX, dstY,
2383 srcGLRect.fLeft, srcGLRect.fBottom, 2354 srcGLRect.fLeft, srcGLRect.fBottom,
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2510 this->setVertexArrayID(gpu, 0); 2481 this->setVertexArrayID(gpu, 0);
2511 } 2482 }
2512 int attrCount = gpu->glCaps().maxVertexAttributes(); 2483 int attrCount = gpu->glCaps().maxVertexAttributes();
2513 if (fDefaultVertexArrayAttribState.count() != attrCount) { 2484 if (fDefaultVertexArrayAttribState.count() != attrCount) {
2514 fDefaultVertexArrayAttribState.resize(attrCount); 2485 fDefaultVertexArrayAttribState.resize(attrCount);
2515 } 2486 }
2516 attribState = &fDefaultVertexArrayAttribState; 2487 attribState = &fDefaultVertexArrayAttribState;
2517 } 2488 }
2518 return attribState; 2489 return attribState;
2519 } 2490 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGpuGL.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698