@@ -1247,6 +1247,37 @@ protected void updateUniformLocation(Shader shader, Uniform uniform) {
1247
1247
}
1248
1248
}
1249
1249
1250
+ private boolean isValidNumber (float v ) {
1251
+ return !Float .isNaN (v );
1252
+ }
1253
+
1254
+ private boolean isValidNumber (FloatBuffer fb ) {
1255
+ for (int i = 0 ; i < fb .limit (); i ++) {
1256
+ if (!isValidNumber (fb .get (i ))) return false ;
1257
+ }
1258
+ return true ;
1259
+ }
1260
+
1261
+ private boolean isValidNumber (Vector2f v ) {
1262
+ return isValidNumber (v .x ) && isValidNumber (v .y );
1263
+ }
1264
+
1265
+ private boolean isValidNumber (Vector3f v ) {
1266
+ return isValidNumber (v .x ) && isValidNumber (v .y ) && isValidNumber (v .z );
1267
+ }
1268
+
1269
+ private boolean isValidNumber (Quaternion q ) {
1270
+ return isValidNumber (q .getX ()) && isValidNumber (q .getY ()) && isValidNumber (q .getZ ()) && isValidNumber (q .getW ());
1271
+ }
1272
+
1273
+ private boolean isValidNumber (ColorRGBA c ) {
1274
+ return isValidNumber (c .r ) && isValidNumber (c .g ) && isValidNumber (c .b ) && isValidNumber (c .a );
1275
+ }
1276
+
1277
+ private boolean isValidNumber (Vector4f c ) {
1278
+ return isValidNumber (c .x ) && isValidNumber (c .y ) && isValidNumber (c .z ) && isValidNumber (c .w );
1279
+ }
1280
+
1250
1281
protected void updateUniform (Shader shader , Uniform uniform ) {
1251
1282
int shaderId = shader .getId ();
1252
1283
@@ -1282,26 +1313,32 @@ protected void updateUniform(Shader shader, Uniform uniform) {
1282
1313
switch (uniform .getVarType ()) {
1283
1314
case Float :
1284
1315
Float f = (Float ) uniform .getValue ();
1316
+ assert isValidNumber (f ) : "Invalid float value " + f ;
1285
1317
gl .glUniform1f (loc , f .floatValue ());
1286
1318
break ;
1287
1319
case Vector2 :
1288
1320
Vector2f v2 = (Vector2f ) uniform .getValue ();
1321
+ assert isValidNumber (v2 ) : "Invalid Vector2f value " + v2 ;
1289
1322
gl .glUniform2f (loc , v2 .getX (), v2 .getY ());
1290
1323
break ;
1291
1324
case Vector3 :
1292
1325
Vector3f v3 = (Vector3f ) uniform .getValue ();
1326
+ assert isValidNumber (v3 ) : "Invalid Vector3f value " + v3 ;
1293
1327
gl .glUniform3f (loc , v3 .getX (), v3 .getY (), v3 .getZ ());
1294
1328
break ;
1295
1329
case Vector4 :
1296
1330
Object val = uniform .getValue ();
1297
1331
if (val instanceof ColorRGBA ) {
1298
1332
ColorRGBA c = (ColorRGBA ) val ;
1333
+ assert isValidNumber (c ) : "Invalid ColorRGBA value " + c ;
1299
1334
gl .glUniform4f (loc , c .r , c .g , c .b , c .a );
1300
1335
} else if (val instanceof Vector4f ) {
1301
1336
Vector4f c = (Vector4f ) val ;
1337
+ assert isValidNumber (c ) : "Invalid Vector4f value " + c ;
1302
1338
gl .glUniform4f (loc , c .x , c .y , c .z , c .w );
1303
1339
} else {
1304
1340
Quaternion c = (Quaternion ) uniform .getValue ();
1341
+ assert isValidNumber (c ) : "Invalid Quaternion value " + c ;
1305
1342
gl .glUniform4f (loc , c .getX (), c .getY (), c .getZ (), c .getW ());
1306
1343
}
1307
1344
break ;
@@ -1311,11 +1348,13 @@ protected void updateUniform(Shader shader, Uniform uniform) {
1311
1348
break ;
1312
1349
case Matrix3 :
1313
1350
fb = uniform .getMultiData ();
1351
+ assert isValidNumber (fb ) : "Invalid Matrix3f value " + uniform .getValue ();
1314
1352
assert fb .remaining () == 9 ;
1315
1353
gl .glUniformMatrix3 (loc , false , fb );
1316
1354
break ;
1317
1355
case Matrix4 :
1318
1356
fb = uniform .getMultiData ();
1357
+ assert isValidNumber (fb ) : "Invalid Matrix4f value " + uniform .getValue ();
1319
1358
assert fb .remaining () == 16 ;
1320
1359
gl .glUniformMatrix4 (loc , false , fb );
1321
1360
break ;
@@ -1325,22 +1364,27 @@ protected void updateUniform(Shader shader, Uniform uniform) {
1325
1364
break ;
1326
1365
case FloatArray :
1327
1366
fb = uniform .getMultiData ();
1367
+ assert isValidNumber (fb ) : "Invalid float array value " + Arrays .asList ((float []) uniform .getValue ());
1328
1368
gl .glUniform1 (loc , fb );
1329
1369
break ;
1330
1370
case Vector2Array :
1331
1371
fb = uniform .getMultiData ();
1372
+ assert isValidNumber (fb ) : "Invalid Vector2f array value " + Arrays .deepToString ((Vector2f []) uniform .getValue ());
1332
1373
gl .glUniform2 (loc , fb );
1333
1374
break ;
1334
1375
case Vector3Array :
1335
1376
fb = uniform .getMultiData ();
1377
+ assert isValidNumber (fb ) : "Invalid Vector3f array value " + Arrays .deepToString ((Vector3f []) uniform .getValue ());
1336
1378
gl .glUniform3 (loc , fb );
1337
1379
break ;
1338
1380
case Vector4Array :
1339
1381
fb = uniform .getMultiData ();
1382
+ assert isValidNumber (fb ) : "Invalid Vector4f array value " + Arrays .deepToString ((Vector4f []) uniform .getValue ());
1340
1383
gl .glUniform4 (loc , fb );
1341
1384
break ;
1342
1385
case Matrix4Array :
1343
1386
fb = uniform .getMultiData ();
1387
+ assert isValidNumber (fb ) : "Invalid Matrix4f array value " + Arrays .deepToString ((Matrix4f []) uniform .getValue ());
1344
1388
gl .glUniformMatrix4 (loc , false , fb );
1345
1389
break ;
1346
1390
case Int :
0 commit comments