159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/* 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copyright (c) 2009-2012 jMonkeyEngine 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * All rights reserved. 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Redistribution and use in source and binary forms, with or without 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * modification, are permitted provided that the following conditions are 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * met: 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions of source code must retain the above copyright 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer. 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions in binary form must reproduce the above copyright 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer in the 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * documentation and/or other materials provided with the distribution. 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * may be used to endorse or promote products derived from this software 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * without specific prior written permission. 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.renderer; 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.shader.Shader; 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.texture.FrameBuffer; 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.texture.FrameBuffer.RenderBuffer; 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.texture.Image; 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.texture.Image.Format; 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.texture.Texture; 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.Collection; 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>Caps</code> is an enum specifying a capability that the {@link Renderer} 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * supports. 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Kirill Vainer 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic enum Caps { 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports {@link FrameBuffer FrameBuffers}. 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * OpenGL: Renderer exposes the GL_EXT_framebuffer_object extension.<br> 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * OpenGL ES: Renderer supports OpenGL ES 2.0. 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta FrameBuffer, 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports framebuffer Multiple Render Targets (MRT) 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * OpenGL: Renderer exposes the GL_ARB_draw_buffers extension 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta FrameBufferMRT, 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports framebuffer multi-sampling 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * OpenGL: Renderer exposes the GL EXT framebuffer multisample extension<br> 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * OpenGL ES: Renderer exposes GL_APPLE_framebuffer_multisample or 7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * GL_ANGLE_framebuffer_multisample. 7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta FrameBufferMultisample, 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports texture multi-sampling 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * OpenGL: Renderer exposes the GL_ARB_texture_multisample extension<br> 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * OpenGL ES: Renderer exposes the GL_IMG_multisampled_render_to_texture 8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * extension. 8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta TextureMultisample, 8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports OpenGL 2.0 or OpenGL ES 2.0. 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta OpenGL20, 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports OpenGL 2.1 9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta OpenGL21, 9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports OpenGL 3.0 9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta OpenGL30, 9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports OpenGL 3.1 10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta OpenGL31, 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports OpenGL 3.2 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta OpenGL32, 10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports OpenGL ARB program. 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * OpenGL: Renderer exposes ARB_vertex_program and ARB_fragment_program 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * extensions. 11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta ARBprogram, 11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports GLSL 1.0 11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta GLSL100, 12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports GLSL 1.1 12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta GLSL110, 12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 12759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports GLSL 1.2 12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta GLSL120, 13159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports GLSL 1.3 13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 13559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta GLSL130, 13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 13859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports GLSL 1.4 13959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 14059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta GLSL140, 14159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 14259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 14359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports GLSL 1.5 14459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 14559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta GLSL150, 14659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 14759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 14859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports GLSL 3.3 14959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 15059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta GLSL330, 15159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 15259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 15359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports reading from textures inside the vertex shader. 15459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 15559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta VertexTextureFetch, 15659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 15759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 15859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports geometry shader. 15959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 16059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta GeometryShader, 16159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 16259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 16359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports texture arrays 16459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 16559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta TextureArray, 16659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 16759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 16859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports texture buffers 16959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 17059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta TextureBuffer, 17159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 17259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 17359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports floating point textures (Format.RGB16F) 17459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 17559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta FloatTexture, 17659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 17759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 17859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports floating point FBO color buffers (Format.RGB16F) 17959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 18059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta FloatColorBuffer, 18159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 18259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 18359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports floating point depth buffer 18459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 18559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta FloatDepthBuffer, 18659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 18759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 18859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports Format.RGB111110F for textures 18959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 19059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta PackedFloatTexture, 19159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 19259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 19359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports Format.RGB9E5 for textures 19459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 19559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta SharedExponentTexture, 19659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 19759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 19859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports Format.RGB111110F for FBO color buffers 19959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 20059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta PackedFloatColorBuffer, 20159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 20259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 20359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports Format.RGB9E5 for FBO color buffers 20459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 20559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta SharedExponentColorBuffer, 20659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 20759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 20859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports Format.LATC for textures, this includes 20959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * support for ATI's 3Dc texture compression. 21059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 21159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta TextureCompressionLATC, 21259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 21359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 21459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports Non-Power-Of-Two (NPOT) textures and framebuffers 21559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 21659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta NonPowerOfTwoTextures, 21759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 21859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /// Vertex Buffer features 21959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta MeshInstancing, 22059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 22159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 22259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports VAO, or vertex buffer arrays 22359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 22459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta VertexBufferArray, 22559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 22659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 22759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Supports multisampling on the screen 22859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 22959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Multisample; 23059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 23159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 23259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns true if given the renderer capabilities, the texture 23359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * can be supported by the renderer. 23459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <p> 23559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This only checks the format of the texture, non-power-of-2 23659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * textures are scaled automatically inside the renderer 23759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * if are not supported natively. 23859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 23959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param caps The collection of renderer capabilities {@link Renderer#getCaps() }. 24059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param tex The texture to check 24159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return True if it is supported, false otherwise. 24259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 24359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static boolean supports(Collection<Caps> caps, Texture tex){ 24459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (tex.getType() == Texture.Type.TwoDimensionalArray 24559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta && !caps.contains(Caps.TextureArray)) 24659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 24759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 24859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Image img = tex.getImage(); 24959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (img == null) 25059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return true; 25159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 25259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Format fmt = img.getFormat(); 25359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta switch (fmt){ 25459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case Depth32F: 25559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.FloatDepthBuffer); 25659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case LATC: 25759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.TextureCompressionLATC); 25859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case RGB16F_to_RGB111110F: 25959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case RGB111110F: 26059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.PackedFloatTexture); 26159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case RGB16F_to_RGB9E5: 26259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case RGB9E5: 26359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.SharedExponentTexture); 26459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta default: 26559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (fmt.isFloatingPont()) 26659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.FloatTexture); 26759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 26859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return true; 26959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 27059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 27159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 27259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 27359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns true if given the renderer capabilities, the framebuffer 27459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * can be supported by the renderer. 27559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 27659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param caps The collection of renderer capabilities {@link Renderer#getCaps() }. 27759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param fb The framebuffer to check 27859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return True if it is supported, false otherwise. 27959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 28059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static boolean supports(Collection<Caps> caps, FrameBuffer fb){ 28159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (!caps.contains(Caps.FrameBuffer)) 28259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 28359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 28459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (fb.getSamples() > 1 28559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta && !caps.contains(Caps.FrameBufferMultisample)) 28659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 28759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 28859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RenderBuffer colorBuf = fb.getColorBuffer(); 28959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RenderBuffer depthBuf = fb.getDepthBuffer(); 29059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 29159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (depthBuf != null){ 29259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Format depthFmt = depthBuf.getFormat(); 29359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (!depthFmt.isDepthFormat()){ 29459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 29559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta }else{ 29659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (depthFmt == Format.Depth32F 29759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta && !caps.contains(Caps.FloatDepthBuffer)) 29859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 29959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 30059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 30159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (colorBuf != null){ 30259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Format colorFmt = colorBuf.getFormat(); 30359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (colorFmt.isDepthFormat()) 30459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 30559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 30659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (colorFmt.isCompressed()) 30759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 30859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 30959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta switch (colorFmt){ 31059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case RGB111110F: 31159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.PackedFloatColorBuffer); 31259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case RGB16F_to_RGB111110F: 31359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case RGB16F_to_RGB9E5: 31459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case RGB9E5: 31559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 31659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta default: 31759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (colorFmt.isFloatingPont()) 31859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.FloatColorBuffer); 31959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 32059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return true; 32159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 32259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 32359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return true; 32459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 32559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 32659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 32759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns true if given the renderer capabilities, the shader 32859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * can be supported by the renderer. 32959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 33059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param caps The collection of renderer capabilities {@link Renderer#getCaps() }. 33159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param shader The shader to check 33259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return True if it is supported, false otherwise. 33359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 33459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static boolean supports(Collection<Caps> caps, Shader shader){ 33559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta String lang = shader.getLanguage(); 33659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (lang.startsWith("GLSL")){ 33759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int ver = Integer.parseInt(lang.substring(4)); 33859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta switch (ver){ 33959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case 100: 34059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.GLSL100); 34159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case 110: 34259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.GLSL110); 34359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case 120: 34459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.GLSL120); 34559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case 130: 34659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.GLSL130); 34759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case 140: 34859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.GLSL140); 34959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case 150: 35059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.GLSL150); 35159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta case 330: 35259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return caps.contains(Caps.GLSL330); 35359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta default: 35459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 35559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 35659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 35759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 35859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 35959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 36059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 361