public TIntIntIterator iterator() { return m.iterator(); // Must be manually synched by user! }
public TIntIntIterator iterator() { return new TIntIntIterator() { TIntIntIterator iter = m.iterator(); public int key() { return iter.key(); } public int value() { return iter.value(); } public void advance() { iter.advance(); } public boolean hasNext() { return iter.hasNext(); } public int setValue( int val ) { throw new UnsupportedOperationException(); } public void remove() { throw new UnsupportedOperationException(); } }; }
@Override public void run() { try { GameThread.synch(() -> { logger.debug("Disposing material {}.", urn); TIntIntIterator it = shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glDeleteProgram(it.value()); } shaderPrograms.clear(); }); } catch (InterruptedException e) { logger.error("Failed to dispose {}", urn, e); } } }
public int mean() { long sum = 0; for (TIntIntIterator it = bins.iterator(); it.hasNext();) { it.advance(); sum += it.key() * it.value(); } return (int) (sum / count); }
private void disposeData() { TIntIntIterator it = fragmentPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glDeleteShader(it.value()); } fragmentPrograms.clear(); it = vertexPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glDeleteShader(it.value()); } vertexPrograms.clear(); } }
/** {@inheritDoc} */ public void putAll( TIntIntMap map ) { ensureCapacity( map.size() ); TIntIntIterator iter = map.iterator(); while ( iter.hasNext() ) { iter.advance(); this.put( iter.key(), iter.value() ); } }
@Override public void setFloat2(String desc, FloatBuffer buffer, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniform2(id, buffer); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniform2(id, buffer); } restoreStateAfterUniformsSet(); } }
@Override public void setFloat4(String desc, float f1, float f2, float f3, float f4, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniform4f(id, f1, f2, f3, f4); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniform4f(id, f1, f2, f3, f4); } restoreStateAfterUniformsSet(); } }
@Override public void setInt(String desc, int i, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniform1i(id, i); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniform1i(id, i); } restoreStateAfterUniformsSet(); } }
@Override public void setFloat3(String desc, float f1, float f2, float f3, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniform3f(id, f1, f2, f3); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniform3f(id, f1, f2, f3); } restoreStateAfterUniformsSet(); } }
@Override public void setMatrix4(String desc, FloatBuffer value, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniformMatrix4(id, false, value); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniformMatrix4(id, false, value); } restoreStateAfterUniformsSet(); } }
@Override public void setBoolean(String desc, boolean value, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniform1i(id, value ? 1 : 0); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniform1i(id, value ? 1 : 0); } restoreStateAfterUniformsSet(); } }
@Override public void setFloat(String desc, float f, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniform1f(id, f); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniform1f(id, f); } restoreStateAfterUniformsSet(); } }
@Override public void setFloat1(String desc, FloatBuffer buffer, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniform1(id, buffer); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniform1(id, buffer); } restoreStateAfterUniformsSet(); } }
@Override public void setFloat2(String desc, float f1, float f2, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniform2f(id, f1, f2); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniform2f(id, f1, f2); } restoreStateAfterUniformsSet(); } }
@Override public void setFloat3(String desc, FloatBuffer buffer, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniform3(id, buffer); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniform3(id, buffer); } restoreStateAfterUniformsSet(); } }
@Override public void setFloat4(String desc, FloatBuffer buffer, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniform4(id, buffer); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniform4(id, buffer); } restoreStateAfterUniformsSet(); } }
@Override public void setMatrix3(String desc, FloatBuffer value, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniformMatrix3(id, false, value); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniformMatrix3(id, false, value); } restoreStateAfterUniformsSet(); } }
@Override public void setMatrix4(String desc, Matrix4f value, boolean currentOnly) { if (isDisposed()) { return; } if (currentOnly) { enable(); int id = getUniformLocation(getActiveShaderProgramId(), desc); GL20.glUniformMatrix4(id, false, MatrixUtils.matrixToFloatBuffer(value)); } else { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glUseProgram(it.value()); int id = getUniformLocation(it.value(), desc); GL20.glUniformMatrix4(id, false, MatrixUtils.matrixToFloatBuffer(value)); } restoreStateAfterUniformsSet(); } }
@Override public void recompile() { TIntIntIterator it = disposalAction.shaderPrograms.iterator(); while (it.hasNext()) { it.advance(); GL20.glDeleteProgram(it.value()); } disposalAction.shaderPrograms.clear(); uniformLocationMap.clear(); bindMap.clear(); disposalAction.shaderPrograms.put(0, shader.linkShaderProgram(0)); for (Set<ShaderProgramFeature> permutation : Sets.powerSet(shader.getAvailableFeatures())) { int featureMask = ShaderProgramFeature.getBitset(permutation); disposalAction.shaderPrograms.put(featureMask, shader.linkShaderProgram(featureMask)); } //resolves #966 //Some of the uniforms are not updated constantly between frames //this function will rebind any uniforms that are not bound rebindVariables(materialData); }