(Program program, String vShaderPath, String gShaderPath, String fShaderPath)
| 2483 | } |
| 2484 | |
| 2485 | private static void setupProgram(Program program, String vShaderPath, String gShaderPath, String fShaderPath) |
| 2486 | { |
| 2487 | checkGLError("pre setupProgram"); |
| 2488 | int i = ARBShaderObjects.glCreateProgramObjectARB(); |
| 2489 | checkGLError("create"); |
| 2490 | |
| 2491 | if (i != 0) |
| 2492 | { |
| 2493 | progUseEntityAttrib = false; |
| 2494 | progUseMidTexCoordAttrib = false; |
| 2495 | progUseTangentAttrib = false; |
| 2496 | int j = createVertShader(program, vShaderPath); |
| 2497 | int k = createGeomShader(program, gShaderPath); |
| 2498 | int l = createFragShader(program, fShaderPath); |
| 2499 | checkGLError("create"); |
| 2500 | |
| 2501 | if (j == 0 && k == 0 && l == 0) |
| 2502 | { |
| 2503 | ARBShaderObjects.glDeleteObjectARB(i); |
| 2504 | i = 0; |
| 2505 | program.resetId(); |
| 2506 | } |
| 2507 | else |
| 2508 | { |
| 2509 | if (j != 0) |
| 2510 | { |
| 2511 | ARBShaderObjects.glAttachObjectARB(i, j); |
| 2512 | checkGLError("attach"); |
| 2513 | } |
| 2514 | |
| 2515 | if (k != 0) |
| 2516 | { |
| 2517 | ARBShaderObjects.glAttachObjectARB(i, k); |
| 2518 | checkGLError("attach"); |
| 2519 | |
| 2520 | if (progArbGeometryShader4) |
| 2521 | { |
| 2522 | ARBGeometryShader4.glProgramParameteriARB(i, 36315, 4); |
| 2523 | ARBGeometryShader4.glProgramParameteriARB(i, 36316, 5); |
| 2524 | ARBGeometryShader4.glProgramParameteriARB(i, 36314, progMaxVerticesOut); |
| 2525 | checkGLError("arbGeometryShader4"); |
| 2526 | } |
| 2527 | |
| 2528 | hasGeometryShaders = true; |
| 2529 | } |
| 2530 | |
| 2531 | if (l != 0) |
| 2532 | { |
| 2533 | ARBShaderObjects.glAttachObjectARB(i, l); |
| 2534 | checkGLError("attach"); |
| 2535 | } |
| 2536 | |
| 2537 | if (progUseEntityAttrib) |
| 2538 | { |
| 2539 | ARBVertexShader.glBindAttribLocationARB(i, entityAttrib, (CharSequence)"mc_Entity"); |
| 2540 | checkGLError("mc_Entity"); |
| 2541 | } |
| 2542 |
no test coverage detected