/******************************************************************************* * Copyright 2012 bmanuel * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.bitfire.postprocessing.utils; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Mesh; import com.badlogic.gdx.graphics.Mesh.VertexDataType; import com.badlogic.gdx.graphics.VertexAttribute; import com.badlogic.gdx.graphics.VertexAttributes.Usage; import com.badlogic.gdx.graphics.glutils.ShaderProgram; /** Encapsulates a fullscreen quad, geometry is aligned to the screen corners. * * @author bmanuel */ public class FullscreenQuad { private Mesh quad; public FullscreenQuad () { quad = createFullscreenQuad(); } public void dispose () { quad.dispose(); } /** Renders the quad with the specified shader program. */ public void render (ShaderProgram program) { quad.render(program, GL20.GL_TRIANGLE_FAN, 0, 4); } private Mesh createFullscreenQuad () { // vertex coord verts[X1] = -1; verts[Y1] = -1; verts[X2] = 1; verts[Y2] = -1; verts[X3] = 1; verts[Y3] = 1; verts[X4] = -1; verts[Y4] = 1; // tex coords verts[U1] = 0f; verts[V1] = 0f; verts[U2] = 1f; verts[V2] = 0f; verts[U3] = 1f; verts[V3] = 1f; verts[U4] = 0f; verts[V4] = 1f; Mesh tmpMesh = new Mesh(VertexDataType.VertexArray, true, 4, 0, new VertexAttribute(Usage.Position, 2, "a_position"), new VertexAttribute(Usage.TextureCoordinates, 2, "a_texCoord0")); tmpMesh.setVertices(verts); return tmpMesh; } private static final int VERT_SIZE = 16; private static float[] verts = new float[VERT_SIZE]; private static final int X1 = 0; private static final int Y1 = 1; private static final int U1 = 2; private static final int V1 = 3; private static final int X2 = 4; private static final int Y2 = 5; private static final int U2 = 6; private static final int V2 = 7; private static final int X3 = 8; private static final int Y3 = 9; private static final int U3 = 10; private static final int V3 = 11; private static final int X4 = 12; private static final int Y4 = 13; private static final int U4 = 14; private static final int V4 = 15; }