public JoglTextureRenderer(final int width, final int height, final int depthBits, final int samples, final Renderer parentRenderer, final ContextCapabilities caps) { super(width, height, depthBits, samples, parentRenderer, caps); if (caps.getMaxFBOColorAttachments() > 1) { _attachBuffer = BufferUtils.createIntBuffer(caps.getMaxFBOColorAttachments()); for (int i = 0; i < caps.getMaxFBOColorAttachments(); i++) { _attachBuffer.put(GL.GL_COLOR_ATTACHMENT0 + i); } } }
public static void applyLodBias(final Texture texture, final TextureUnitRecord unitRecord, final int unit, final TextureStateRecord record, final ContextCapabilities caps) { if (caps.isTextureLodBiasSupported()) { final float bias = texture.getLodBias() < caps.getMaxLodBias() ? texture.getLodBias() : caps .getMaxLodBias(); if (!unitRecord.isValid() || unitRecord.lodBias != bias) { checkAndSetUnit(unit, record, caps); GL11.glTexEnvf(EXTTextureLODBias.GL_TEXTURE_FILTER_CONTROL_EXT, EXTTextureLODBias.GL_TEXTURE_LOD_BIAS_EXT, bias); unitRecord.lodBias = bias; } } }
final TextureState ts = (TextureState) context.getCurrentState(RenderState.StateType.Texture); if (ts != null) { final int max = caps.isMultitextureSupported() ? Math.min(caps.getNumberOfFragmentTexCoordUnits(), TextureState.MAX_TEXTURES) : 1; boolean exists;
public static void checkAndSetUnit(final int unit, final TextureStateRecord record, final ContextCapabilities caps) { // No need to worry about valid record, since invalidate sets record's // currentUnit to -1. if (record.currentUnit != unit) { if (unit >= caps.getNumberOfTotalTextureUnits() || !caps.isMultitextureSupported() || unit < 0) { // ignore this request as it is not valid for the user's hardware. return; } ARBMultitexture.glActiveTextureARB(ARBMultitexture.GL_TEXTURE0_ARB + unit); record.currentUnit = unit; } }
public AbstractFBOTextureRenderer(final int width, final int height, final int depthBits, final int samples, final Renderer parentRenderer, final ContextCapabilities caps) { _parentRenderer = parentRenderer; _samples = Math.min(samples, caps.getMaxFBOSamples()); _depthBits = depthBits; _supportsDepthTexture = caps.isDepthTextureSupported(); _supportsMultisample = caps.getMaxFBOSamples() != 0; if (!caps.isNonPowerOfTwoTextureSupported()) {
for (int i = 0; i < caps.getNumberOfTotalTextureUnits(); i++) { unitRecord = record.units[i]; if (i >= caps.getNumberOfFixedTextureUnits()) { continue; } else { if (i < caps.getNumberOfFixedTextureUnits()) { if (texture.getApply() == ApplyMode.Combine && caps.isMultitextureSupported() && caps.isEnvCombineSupported()) { applyCombineFactors(texture, unitRecord, i, record, caps); if (i < caps.getNumberOfFragmentTextureUnits()) { if (i < caps.getNumberOfFragmentTexCoordUnits()) { if (caps.isMultitextureSupported()) { for (int i = 0; i < caps.getNumberOfFixedTextureUnits(); i++) { unitRecord = record.units[i]; disableTexturing(unitRecord, record, i, caps);
final int maxSize = caps.getMaxTextureSize(); final int actualWidth = image.getWidth(); final int actualHeight = image.getHeight(); final boolean needsPowerOfTwo = !caps.isNonPowerOfTwoTextureSupported() && (!MathUtils.isPowerOfTwo(image.getWidth()) || !MathUtils.isPowerOfTwo(image.getHeight())); if (actualWidth > maxSize || actualHeight > maxSize || needsPowerOfTwo) { break; case ThreeDimensional: if (caps.isTexture3DSupported()) { if (caps.isTextureCubeMapSupported()) { for (final TextureCubeMap.Face face : TextureCubeMap.Face.values()) { if (caps.isAutomaticMipmapsSupported()) { if (caps.isAutomaticMipmapsSupported()) { if (caps.isAutomaticMipmapsSupported()) { if (caps.isTexture3DSupported()) { if (caps.isAutomaticMipmapsSupported()) { if (caps.isTextureCubeMapSupported()) { if (caps.isAutomaticMipmapsSupported()) { for (final TextureCubeMap.Face face : TextureCubeMap.Face.values()) { if (caps.isTextureCubeMapSupported()) {
if (useRefraction && useProjectedShader && caps.getNumberOfFragmentTextureUnits() < 6 || useRefraction && caps.getNumberOfFragmentTextureUnits() < 5) { useRefraction = false; logger.info("Not enough textureunits, falling back to non refraction water"); if (!caps.isGLSLSupported()) { supported = false; if (!(caps.isPbufferSupported() || caps.isFBOSupported())) { supported = false;
if (!caps.isGLSLSupported() || !(caps.isPbufferSupported() || caps.isFBOSupported())) { supported = false; return;
if (caps.isAnisoSupported()) { float aniso = texture.getAnisotropicFilterPercent() * (caps.getMaxAnisotropic() - 1.0f); aniso += 1.0f; if (!texRecord.isValid() || (texRecord.anisoLevel - aniso > MathUtils.ZERO_TOLERANCE)) {
if (caps.isGLSLSupported()) { _pssmShader = new GLSLShaderObjectsState(); try {
for (int i = 0; i < caps.getNumberOfTotalTextureUnits(); i++) { unitRecord = record.units[i]; if (i < caps.getNumberOfFragmentTextureUnits()) {
final Type type = texture.getType(); if (caps.isDepthTextureSupported()) { final int depthMode = LwjglTextureUtil.getGLDepthTextureMode(texture.getDepthMode()); if (caps.isARBShadowSupported()) { final int depthCompareMode = LwjglTextureUtil.getGLDepthTextureCompareMode(texture.getDepthCompareMode());
if (useRefraction && useProjectedShader && caps.getNumberOfFragmentTextureUnits() < 6 || useRefraction && caps.getNumberOfFragmentTextureUnits() < 5) { useRefraction = false; logger.info("Not enough textureunits, falling back to non refraction water");
final TextureState ts = (TextureState) context.getCurrentState(RenderState.StateType.Texture); if (ts != null) { for (int i = 0; i <= ts.getMaxTextureIndexUsed() && i < caps.getNumberOfFragmentTexCoordUnits(); i++) { if (textureCoords == null || i >= textureCoords.size()) { continue;
public static void checkAndSetUnit(final int unit, final TextureStateRecord record, final ContextCapabilities caps) { // No need to worry about valid record, since invalidate sets record's // currentUnit to -1. if (record.currentUnit != unit) { if (unit >= caps.getNumberOfTotalTextureUnits() || unit < 0) { // ignore this request as it is not valid for the user's hardware. return; } GL13C.glActiveTexture(GL13C.GL_TEXTURE0 + unit); record.currentUnit = unit; } }
public static void applyLodBias(final Texture texture, final TextureUnitRecord unitRecord, final int unit, final TextureStateRecord record, final ContextCapabilities caps) { final float bias = texture.getLodBias() < caps.getMaxLodBias() ? texture.getLodBias() : caps.getMaxLodBias(); if (!unitRecord.isValid() || unitRecord.lodBias != bias) { checkAndSetUnit(unit, record, caps); GL11C.glTexParameterf(getGLType(texture.getType()), GL14C.GL_TEXTURE_LOD_BIAS, bias); unitRecord.lodBias = bias; } }
final int maxSize = caps.getMaxTextureSize(); final int actualWidth = image.getWidth(); final int actualHeight = image.getHeight();
for (int i = 0; i < caps.getNumberOfTotalTextureUnits(); i++) { unitRecord = record.units[i]; if (i >= caps.getNumberOfFixedTextureUnits()) { continue; } else { if (i < caps.getNumberOfFixedTextureUnits()) { if (texture.getApply() == ApplyMode.Combine && caps.isMultitextureSupported() && caps.isEnvCombineSupported()) { applyCombineFactors(texture, unitRecord, i, record, caps); if (i < caps.getNumberOfFragmentTextureUnits()) { if (i < caps.getNumberOfFragmentTexCoordUnits()) { if (caps.isMultitextureSupported()) { for (int i = 0; i < caps.getNumberOfFixedTextureUnits(); i++) { unitRecord = record.units[i]; disableTexturing(unitRecord, record, i, caps);
final int maxSize = caps.getMaxTextureSize(); final int actualWidth = image.getWidth(); final int actualHeight = image.getHeight(); final boolean needsPowerOfTwo = !caps.isNonPowerOfTwoTextureSupported() && (!MathUtils.isPowerOfTwo(image.getWidth()) || !MathUtils.isPowerOfTwo(image.getHeight())); if (actualWidth > maxSize || actualHeight > maxSize || needsPowerOfTwo) { break; case ThreeDimensional: if (caps.isTexture3DSupported()) { if (caps.isTextureCubeMapSupported()) { for (final TextureCubeMap.Face face : TextureCubeMap.Face.values()) { if (caps.isAutomaticMipmapsSupported()) { if (caps.isAutomaticMipmapsSupported()) { if (caps.isAutomaticMipmapsSupported()) { if (caps.isTexture3DSupported()) { if (caps.isAutomaticMipmapsSupported()) { if (caps.isTextureCubeMapSupported()) { if (caps.isAutomaticMipmapsSupported()) { for (final TextureCubeMap.Face face : TextureCubeMap.Face.values()) { ByteBuffer data = null;