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

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

Issue 54403003: Fix few inconsistencies in handling fixed-function texture coordinate set generation (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 1 month 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
« src/gpu/gl/GrGLProgram.cpp ('K') | « 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"
(...skipping 2082 matching lines...) Expand 10 before | Expand all | Expand 10 after
2093 2093
2094 GrGLfloat glMatrix[4 * 4]; 2094 GrGLfloat glMatrix[4 * 4];
2095 fHWProjectionMatrixState.getGLMatrix<4>(glMatrix); 2095 fHWProjectionMatrixState.getGLMatrix<4>(glMatrix);
2096 GL_CALL(MatrixMode(GR_GL_PROJECTION)); 2096 GL_CALL(MatrixMode(GR_GL_PROJECTION));
2097 GL_CALL(LoadMatrixf(glMatrix)); 2097 GL_CALL(LoadMatrixf(glMatrix));
2098 } 2098 }
2099 2099
2100 void GrGpuGL::enableTexGen(int unitIdx, 2100 void GrGpuGL::enableTexGen(int unitIdx,
2101 TexGenComponents components, 2101 TexGenComponents components,
2102 const GrGLfloat* coefficients) { 2102 const GrGLfloat* coefficients) {
2103
2104 SkASSERT(this->glCaps().fixedFunctionSupport()); 2103 SkASSERT(this->glCaps().fixedFunctionSupport());
2105 SkASSERT(this->caps()->pathRenderingSupport());
2106 SkASSERT(components >= kS_TexGenComponents && components <= kSTR_TexGenCompo nents); 2104 SkASSERT(components >= kS_TexGenComponents && components <= kSTR_TexGenCompo nents);
2107 SkASSERT(this->glCaps().maxFixedFunctionTextureCoords() >= unitIdx); 2105 SkASSERT(this->glCaps().maxFixedFunctionTextureCoords() >= unitIdx);
2108 2106
2109 if (GR_GL_OBJECT_LINEAR == fHWTexGenSettings[unitIdx].fMode && 2107 if (GR_GL_OBJECT_LINEAR == fHWTexGenSettings[unitIdx].fMode &&
2110 components == fHWTexGenSettings[unitIdx].fNumComponents && 2108 components == fHWTexGenSettings[unitIdx].fNumComponents &&
2111 !memcmp(coefficients, fHWTexGenSettings[unitIdx].fCoefficients, 2109 !memcmp(coefficients, fHWTexGenSettings[unitIdx].fCoefficients,
2112 3 * components * sizeof(GrGLfloat))) { 2110 3 * components * sizeof(GrGLfloat))) {
2113 return; 2111 return;
2114 } 2112 }
2115 2113
(...skipping 15 matching lines...) Expand all
2131 fHWTexGenSettings[unitIdx].fNumComponents = components; 2129 fHWTexGenSettings[unitIdx].fNumComponents = components;
2132 2130
2133 for (int i = 0; i < components; i++) { 2131 for (int i = 0; i < components; i++) {
2134 GrGLfloat plane[] = {coefficients[0 + 3 * i], 2132 GrGLfloat plane[] = {coefficients[0 + 3 * i],
2135 coefficients[1 + 3 * i], 2133 coefficients[1 + 3 * i],
2136 0, 2134 0,
2137 coefficients[2 + 3 * i]}; 2135 coefficients[2 + 3 * i]};
2138 GL_CALL(TexGenfv(GR_GL_S + i, GR_GL_OBJECT_PLANE, plane)); 2136 GL_CALL(TexGenfv(GR_GL_S + i, GR_GL_OBJECT_PLANE, plane));
2139 } 2137 }
2140 2138
2141 GL_CALL(PathTexGen(GR_GL_TEXTURE0 + unitIdx, 2139 if (this->caps()->pathRenderingSupport()) {
2142 GR_GL_OBJECT_LINEAR, 2140 GL_CALL(PathTexGen(GR_GL_TEXTURE0 + unitIdx,
2143 components, 2141 GR_GL_OBJECT_LINEAR,
2144 coefficients)); 2142 components,
2143 coefficients));
2144 }
2145 2145
2146 memcpy(fHWTexGenSettings[unitIdx].fCoefficients, coefficients, 2146 memcpy(fHWTexGenSettings[unitIdx].fCoefficients, coefficients,
2147 3 * components * sizeof(GrGLfloat)); 2147 3 * components * sizeof(GrGLfloat));
2148
2149 fHWActiveTexGenSets = SkTMax(fHWActiveTexGenSets, unitIdx);
2150 } 2148 }
2151 2149
2152 void GrGpuGL::enableTexGen(int unitIdx, TexGenComponents components, const SkMat rix& matrix) { 2150 void GrGpuGL::enableTexGen(int unitIdx, TexGenComponents components, const SkMat rix& matrix) {
2153
2154 GrGLfloat coefficients[3 * 3]; 2151 GrGLfloat coefficients[3 * 3];
2155 SkASSERT(this->glCaps().fixedFunctionSupport()); 2152 SkASSERT(this->glCaps().fixedFunctionSupport());
2156 SkASSERT(components >= kS_TexGenComponents && components <= kSTR_TexGenCompo nents); 2153 SkASSERT(components >= kS_TexGenComponents && components <= kSTR_TexGenCompo nents);
2157 2154
2158 coefficients[0] = SkScalarToFloat(matrix[SkMatrix::kMScaleX]); 2155 coefficients[0] = SkScalarToFloat(matrix[SkMatrix::kMScaleX]);
2159 coefficients[1] = SkScalarToFloat(matrix[SkMatrix::kMSkewX]); 2156 coefficients[1] = SkScalarToFloat(matrix[SkMatrix::kMSkewX]);
2160 coefficients[2] = SkScalarToFloat(matrix[SkMatrix::kMTransX]); 2157 coefficients[2] = SkScalarToFloat(matrix[SkMatrix::kMTransX]);
2161 2158
2162 if (components >= kST_TexGenComponents) { 2159 if (components >= kST_TexGenComponents) {
2163 coefficients[3] = SkScalarToFloat(matrix[SkMatrix::kMSkewY]); 2160 coefficients[3] = SkScalarToFloat(matrix[SkMatrix::kMSkewY]);
2164 coefficients[4] = SkScalarToFloat(matrix[SkMatrix::kMScaleY]); 2161 coefficients[4] = SkScalarToFloat(matrix[SkMatrix::kMScaleY]);
2165 coefficients[5] = SkScalarToFloat(matrix[SkMatrix::kMTransY]); 2162 coefficients[5] = SkScalarToFloat(matrix[SkMatrix::kMTransY]);
2166 } 2163 }
2167 2164
2168 if (components >= kSTR_TexGenComponents) { 2165 if (components >= kSTR_TexGenComponents) {
2169 coefficients[6] = SkScalarToFloat(matrix[SkMatrix::kMPersp0]); 2166 coefficients[6] = SkScalarToFloat(matrix[SkMatrix::kMPersp0]);
2170 coefficients[7] = SkScalarToFloat(matrix[SkMatrix::kMPersp1]); 2167 coefficients[7] = SkScalarToFloat(matrix[SkMatrix::kMPersp1]);
2171 coefficients[8] = SkScalarToFloat(matrix[SkMatrix::kMPersp2]); 2168 coefficients[8] = SkScalarToFloat(matrix[SkMatrix::kMPersp2]);
2172 } 2169 }
2173 2170
2174 enableTexGen(unitIdx, components, coefficients); 2171 enableTexGen(unitIdx, components, coefficients);
2175 } 2172 }
2176 2173
2177 void GrGpuGL::disableUnusedTexGen(int numUsedTexCoordSets) { 2174 void GrGpuGL::flushTexGenSettings(int numUsedTexCoordSets) {
2178
2179 SkASSERT(this->glCaps().fixedFunctionSupport()); 2175 SkASSERT(this->glCaps().fixedFunctionSupport());
2180 SkASSERT(this->glCaps().maxFixedFunctionTextureCoords() >= numUsedTexCoordSe ts); 2176 SkASSERT(this->glCaps().maxFixedFunctionTextureCoords() >= numUsedTexCoordSe ts);
2181 2177
2178 // Only write the inactive tex gens, since active tex gens were written
2179 // when they were enabled.
2180
2181 SkDEBUGCODE(
2182 for (int i = 0; i < numUsedTexCoordSets; i++) {
2183 SkASSERT(0 != fHWTexGenSettings[i].fNumComponents);
2184 }
2185 );
2186
2182 for (int i = numUsedTexCoordSets; i < fHWActiveTexGenSets; i++) { 2187 for (int i = numUsedTexCoordSets; i < fHWActiveTexGenSets; i++) {
2183 if (0 == fHWTexGenSettings[i].fNumComponents) { 2188 SkASSERT(0 != fHWTexGenSettings[i].fNumComponents);
2184 continue;
2185 }
2186 2189
2187 this->setTextureUnit(i); 2190 this->setTextureUnit(i);
2188 for (int j = 0; j < fHWTexGenSettings[i].fNumComponents; j++) { 2191 for (int j = 0; j < fHWTexGenSettings[i].fNumComponents; j++) {
2189 GL_CALL(Disable(GR_GL_TEXTURE_GEN_S + j)); 2192 GL_CALL(Disable(GR_GL_TEXTURE_GEN_S + j));
2190 } 2193 }
2191 GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL)); 2194
2195 if (this->caps()->pathRenderingSupport()) {
2196 GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL));
2197 }
2198
2192 fHWTexGenSettings[i].fNumComponents = 0; 2199 fHWTexGenSettings[i].fNumComponents = 0;
2193 } 2200 }
2194 2201
2195 fHWActiveTexGenSets = SkTMin(fHWActiveTexGenSets, numUsedTexCoordSets); 2202 fHWActiveTexGenSets = numUsedTexCoordSets;
2196 } 2203 }
2197 2204
2198 void GrGpuGL::flushMiscFixedFunctionState() { 2205 void GrGpuGL::flushMiscFixedFunctionState() {
2199 2206
2200 const GrDrawState& drawState = this->getDrawState(); 2207 const GrDrawState& drawState = this->getDrawState();
2201 2208
2202 if (drawState.isDitherState()) { 2209 if (drawState.isDitherState()) {
2203 if (kYes_TriState != fHWDitherEnabled) { 2210 if (kYes_TriState != fHWDitherEnabled) {
2204 GL_CALL(Enable(GR_GL_DITHER)); 2211 GL_CALL(Enable(GR_GL_DITHER));
2205 fHWDitherEnabled = kYes_TriState; 2212 fHWDitherEnabled = kYes_TriState;
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
2673 this->setVertexArrayID(gpu, 0); 2680 this->setVertexArrayID(gpu, 0);
2674 } 2681 }
2675 int attrCount = gpu->glCaps().maxVertexAttributes(); 2682 int attrCount = gpu->glCaps().maxVertexAttributes();
2676 if (fDefaultVertexArrayAttribState.count() != attrCount) { 2683 if (fDefaultVertexArrayAttribState.count() != attrCount) {
2677 fDefaultVertexArrayAttribState.resize(attrCount); 2684 fDefaultVertexArrayAttribState.resize(attrCount);
2678 } 2685 }
2679 attribState = &fDefaultVertexArrayAttribState; 2686 attribState = &fDefaultVertexArrayAttribState;
2680 } 2687 }
2681 return attribState; 2688 return attribState;
2682 } 2689 }
OLDNEW
« src/gpu/gl/GrGLProgram.cpp ('K') | « src/gpu/gl/GrGpuGL.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698