@@ -69,13 +69,6 @@ public final class PGraphics2DX extends PGraphicsOpenGL {
69
69
70
70
static protected final int SHADER2D = 7 ;
71
71
72
- // Enables/disables matrix pre-multiplication
73
- // https://github.com/processing/processing/wiki/Advanced-OpenGL#vertex-coordinates-are-in-model-space
74
- // https://github.com/processing/processing/issues/2904
75
- // see above URLs for some discussion on premultiplying matrix vs. flushing buffer on matrix change.
76
- // rather than committing to one or the other, this implementation supports both
77
- public static boolean premultiplyMatrices = true ;
78
-
79
72
// Uses the implementations in the parent PGraphicsOpenGL class, which is needed to to draw obj files
80
73
// and apply shader filters.
81
74
protected boolean useParentImpl = false ;
@@ -1101,200 +1094,6 @@ protected void textCharModelImpl(FontTexture.TextureInfo info,
1101
1094
}
1102
1095
1103
1096
1104
- //////////////////////////////////////////////////////////////
1105
-
1106
- // MATRIX OPS
1107
-
1108
-
1109
- /*
1110
- * Monkey-patch all methods that modify matrices to optionally flush the vertex buffer.
1111
- * If you see a method that isn't here but should be, or is here but shouldn't,
1112
- * feel free to add/remove it.
1113
- */
1114
-
1115
-
1116
- @ Override
1117
- public void applyMatrix (float n00 , float n01 , float n02 , float n10 , float n11 , float n12 ) {
1118
- preMatrixChanged ();
1119
- super .applyMatrix (n00 , n01 , n02 , n10 , n11 , n12 );
1120
- postMatrixChanged ();
1121
- }
1122
-
1123
-
1124
- @ Override
1125
- public void applyMatrix (PMatrix2D source ) {
1126
- preMatrixChanged ();
1127
- super .applyMatrix (source );
1128
- postMatrixChanged ();
1129
- }
1130
-
1131
-
1132
- @ Override
1133
- public void applyProjection (float n00 , float n01 , float n02 , float n03 ,
1134
- float n10 , float n11 , float n12 , float n13 ,
1135
- float n20 , float n21 , float n22 , float n23 ,
1136
- float n30 , float n31 , float n32 , float n33 ) {
1137
- preMatrixChanged ();
1138
- super .applyProjection (n00 , n01 , n02 , n03 ,
1139
- n10 , n11 , n12 , n13 ,
1140
- n20 , n21 , n22 , n23 ,
1141
- n30 , n31 , n32 , n33 );
1142
- postMatrixChanged ();
1143
- }
1144
-
1145
-
1146
- @ Override
1147
- public void applyProjection (PMatrix3D mat ) {
1148
- preMatrixChanged ();
1149
- super .applyProjection (mat );
1150
- postMatrixChanged ();
1151
- }
1152
-
1153
-
1154
- @ Override
1155
- public void popMatrix () {
1156
- preMatrixChanged ();
1157
- super .popMatrix ();
1158
- postMatrixChanged ();
1159
- }
1160
-
1161
-
1162
- @ Override
1163
- public void popProjection () {
1164
- preMatrixChanged ();
1165
- super .popProjection ();
1166
- postMatrixChanged ();
1167
- }
1168
-
1169
-
1170
- @ Override
1171
- public void pushMatrix () {
1172
- preMatrixChanged ();
1173
- super .pushMatrix ();
1174
- postMatrixChanged ();
1175
- }
1176
-
1177
-
1178
- @ Override
1179
- public void pushProjection () {
1180
- preMatrixChanged ();
1181
- super .pushProjection ();
1182
- postMatrixChanged ();
1183
- }
1184
-
1185
-
1186
- @ Override
1187
- public void resetMatrix () {
1188
- preMatrixChanged ();
1189
- super .resetMatrix ();
1190
- postMatrixChanged ();
1191
- }
1192
-
1193
-
1194
- @ Override
1195
- public void resetProjection () {
1196
- preMatrixChanged ();
1197
- super .resetProjection ();
1198
- postMatrixChanged ();
1199
- }
1200
-
1201
-
1202
- @ Override
1203
- public void rotate (float angle ) {
1204
- preMatrixChanged ();
1205
- super .rotate (angle );
1206
- postMatrixChanged ();
1207
- }
1208
-
1209
-
1210
- @ Override
1211
- public void scale (float s ) {
1212
- preMatrixChanged ();
1213
- super .scale (s );
1214
- postMatrixChanged ();
1215
- }
1216
-
1217
-
1218
- @ Override
1219
- public void scale (float sx , float sy ) {
1220
- preMatrixChanged ();
1221
- super .scale (sx , sy );
1222
- postMatrixChanged ();
1223
- }
1224
-
1225
-
1226
- @ Override
1227
- public void setMatrix (PMatrix2D source ) {
1228
- preMatrixChanged ();
1229
- super .setMatrix (source );
1230
- postMatrixChanged ();
1231
- }
1232
-
1233
-
1234
- @ Override
1235
- public void setProjection (PMatrix3D mat ) {
1236
- preMatrixChanged ();
1237
- super .setProjection (mat );
1238
- postMatrixChanged ();
1239
- }
1240
-
1241
-
1242
- @ Override
1243
- public void shearX (float angle ) {
1244
- preMatrixChanged ();
1245
- super .shearX (angle );
1246
- postMatrixChanged ();
1247
- }
1248
-
1249
-
1250
- @ Override
1251
- public void shearY (float angle ) {
1252
- preMatrixChanged ();
1253
- super .shearY (angle );
1254
- postMatrixChanged ();
1255
- }
1256
-
1257
-
1258
- @ Override
1259
- public void translate (float tx , float ty ) {
1260
- preMatrixChanged ();
1261
- super .translate (tx , ty );
1262
- postMatrixChanged ();
1263
- }
1264
-
1265
-
1266
- @ Override
1267
- public void updateProjmodelview () {
1268
- preMatrixChanged ();
1269
- super .updateProjmodelview ();
1270
- postMatrixChanged ();
1271
- }
1272
-
1273
-
1274
- @ Override
1275
- public void updateGLModelview () {
1276
- preMatrixChanged ();
1277
- super .updateGLModelview ();
1278
- postMatrixChanged ();
1279
- }
1280
-
1281
-
1282
- @ Override
1283
- public void updateGLProjection () {
1284
- preMatrixChanged ();
1285
- super .updateGLProjection ();
1286
- postMatrixChanged ();
1287
- }
1288
-
1289
-
1290
- @ Override
1291
- public void updateGLProjmodelview () {
1292
- preMatrixChanged ();
1293
- super .updateGLProjmodelview ();
1294
- postMatrixChanged ();
1295
- }
1296
-
1297
-
1298
1097
//////////////////////////////////////////////////////////////
1299
1098
1300
1099
// MATRIX MORE!
@@ -1781,11 +1580,7 @@ private void setAttribs() {
1781
1580
1782
1581
private void loadUniforms () {
1783
1582
//set matrix uniform
1784
- if (premultiplyMatrices ) {
1785
- pgl .uniformMatrix4fv (transformLoc , 1 , true , FloatBuffer .wrap (new PMatrix3D ().get (null )));
1786
- } else {
1787
- pgl .uniformMatrix4fv (transformLoc , 1 , true , FloatBuffer .wrap (projmodelview .get (null )));
1788
- }
1583
+ pgl .uniformMatrix4fv (transformLoc , 1 , true , FloatBuffer .wrap (new PMatrix3D ().get (null )));
1789
1584
1790
1585
//set texture info
1791
1586
pgl .activeTexture (PGL .TEXTURE0 );
@@ -1820,14 +1615,9 @@ private void check(int newVerts) {
1820
1615
1821
1616
private void vertexImpl (float x , float y , float u , float v , int c , float f ) {
1822
1617
int idx = usedVerts * 7 ;
1823
- if (premultiplyMatrices ) {
1824
- //inline multiply only x and y to avoid an allocation and a few flops
1825
- vertexData [idx + 0 ] = projmodelview .m00 *x + projmodelview .m01 *y + projmodelview .m03 ;
1826
- vertexData [idx + 1 ] = projmodelview .m10 *x + projmodelview .m11 *y + projmodelview .m13 ;
1827
- } else {
1828
- vertexData [idx + 0 ] = x ;
1829
- vertexData [idx + 1 ] = y ;
1830
- }
1618
+ //inline multiply only x and y to avoid an allocation and a few flops
1619
+ vertexData [idx + 0 ] = projmodelview .m00 *x + projmodelview .m01 *y + projmodelview .m03 ;
1620
+ vertexData [idx + 1 ] = projmodelview .m10 *x + projmodelview .m11 *y + projmodelview .m13 ;
1831
1621
vertexData [idx + 2 ] = depth ;
1832
1622
vertexData [idx + 3 ] = u ;
1833
1623
vertexData [idx + 4 ] = v ;
@@ -1900,30 +1690,6 @@ private void shapeVertex(float x, float y, float u, float v, int c, float f) {
1900
1690
}
1901
1691
1902
1692
1903
- float ellipseDetailMultiplier = 1 ;
1904
-
1905
-
1906
- private void preMatrixChanged () {
1907
- if (!premultiplyMatrices ) {
1908
- flushBuffer ();
1909
- }
1910
- }
1911
-
1912
-
1913
- private void postMatrixChanged () {
1914
- //this serves as a rough approximation of how much the longest axis
1915
- //of an ellipse will be scaled by a given matrix
1916
- //(in other words, the amount by which its on-screen size changes)
1917
- float sxi = projmodelview .m00 * width / 2 ;
1918
- float syi = projmodelview .m10 * height / 2 ;
1919
- float sxj = projmodelview .m01 * width / 2 ;
1920
- float syj = projmodelview .m11 * height / 2 ;
1921
- float Imag2 = sxi * sxi + syi * syi ;
1922
- float Jmag2 = sxj * sxj + syj * syj ;
1923
- ellipseDetailMultiplier = PApplet .sqrt (PApplet .max (Imag2 , Jmag2 ));
1924
- }
1925
-
1926
-
1927
1693
private void triangle (float x1 , float y1 , float x2 , float y2 , float x3 , float y3 , int color ) {
1928
1694
check (3 );
1929
1695
vertexImpl (x1 , y1 , 0 , 0 , color , 0 );
@@ -2239,6 +2005,16 @@ void endLine(boolean closed) {
2239
2005
2240
2006
//returns the total number of points needed to approximate an arc of a given radius and extent
2241
2007
int circleDetail (float radius , float delta ) {
2008
+ //this serves as a rough approximation of how much the longest axis
2009
+ //of an ellipse will be scaled by a given matrix
2010
+ //(in other words, the amount by which its on-screen size changes)
2011
+ float sxi = projmodelview .m00 * width / 2 ;
2012
+ float syi = projmodelview .m10 * height / 2 ;
2013
+ float sxj = projmodelview .m01 * width / 2 ;
2014
+ float syj = projmodelview .m11 * height / 2 ;
2015
+ float Imag2 = sxi * sxi + syi * syi ;
2016
+ float Jmag2 = sxj * sxj + syj * syj ;
2017
+ float ellipseDetailMultiplier = PApplet .sqrt (PApplet .max (Imag2 , Jmag2 ));
2242
2018
radius *= ellipseDetailMultiplier ;
2243
2019
return (int )(PApplet .min (127 , PApplet .sqrt (radius ) / QUARTER_PI * PApplet .abs (delta ) * 0.75f ) + 1 );
2244
2020
}
@@ -2277,4 +2053,4 @@ public String toString() {
2277
2053
return x + ", " + y ;
2278
2054
}
2279
2055
}
2280
- }
2056
+ }
0 commit comments