• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  * Copyright 2011 See AUTHORS file.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16 
17 package com.badlogic.gdx.tests;
18 
19 import com.badlogic.gdx.Gdx;
20 import com.badlogic.gdx.InputMultiplexer;
21 import com.badlogic.gdx.graphics.GL20;
22 import com.badlogic.gdx.graphics.Mesh;
23 import com.badlogic.gdx.graphics.PerspectiveCamera;
24 import com.badlogic.gdx.graphics.Pixmap.Format;
25 import com.badlogic.gdx.graphics.Texture;
26 import com.badlogic.gdx.graphics.Texture.TextureFilter;
27 import com.badlogic.gdx.graphics.VertexAttribute;
28 import com.badlogic.gdx.graphics.VertexAttributes.Usage;
29 import com.badlogic.gdx.graphics.glutils.MipMapGenerator;
30 import com.badlogic.gdx.graphics.glutils.ShaderProgram;
31 import com.badlogic.gdx.scenes.scene2d.Stage;
32 import com.badlogic.gdx.scenes.scene2d.ui.CheckBox;
33 import com.badlogic.gdx.scenes.scene2d.ui.Label;
34 import com.badlogic.gdx.scenes.scene2d.ui.SelectBox;
35 import com.badlogic.gdx.scenes.scene2d.ui.Table;
36 import com.badlogic.gdx.scenes.scene2d.ui.SelectBox.SelectBoxStyle;
37 import com.badlogic.gdx.scenes.scene2d.ui.Skin;
38 import com.badlogic.gdx.tests.utils.GdxTest;
39 import com.badlogic.gdx.tests.utils.PerspectiveCamController;
40 import com.badlogic.gdx.utils.GdxRuntimeException;
41 
42 public class MipMapTest extends GdxTest {
43 	PerspectiveCamera camera;
44 	PerspectiveCamController controller;
45 	Mesh mesh;
46 	Texture textureHW;
47 	Texture textureSW;
48 	Texture currTexture;
49 	ShaderProgram shader;
50 	Stage ui;
51 	Skin skin;
52 	InputMultiplexer multiplexer;
53 	SelectBox<String> minFilter;
54 	SelectBox<String> magFilter;
55 	CheckBox hwMipMap;
56 
57 	@Override
create()58 	public void create () {
59 		camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
60 		camera.position.set(0, 1.5f, 1.5f);
61 		camera.lookAt(0, 0, 0);
62 		camera.update();
63 		controller = new PerspectiveCamController(camera);
64 
65 		mesh = new Mesh(true, 4, 4, new VertexAttribute(Usage.Position, 3, ShaderProgram.POSITION_ATTRIBUTE), new VertexAttribute(
66 			Usage.TextureCoordinates, 2, ShaderProgram.TEXCOORD_ATTRIBUTE));
67 		mesh.setVertices(new float[] {-1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, -1, 1, 0, -1, 0, -1, 0, 0,});
68 		mesh.setIndices(new short[] {0, 1, 2, 3});
69 
70 		shader = new ShaderProgram(Gdx.files.internal("data/shaders/flattex-vert.glsl").readString(), Gdx.files.internal(
71 			"data/shaders/flattex-frag.glsl").readString());
72 		if (!shader.isCompiled()) throw new GdxRuntimeException("shader error: " + shader.getLog());
73 
74 		textureHW = new Texture(Gdx.files.internal("data/badlogic.jpg"), Format.RGB565, true);
75 		MipMapGenerator.setUseHardwareMipMap(false);
76 		textureSW = new Texture(Gdx.files.internal("data/badlogic.jpg"), Format.RGB565, true);
77 		currTexture = textureHW;
78 
79 		createUI();
80 
81 		multiplexer = new InputMultiplexer();
82 		Gdx.input.setInputProcessor(multiplexer);
83 		multiplexer.addProcessor(ui);
84 		multiplexer.addProcessor(controller);
85 	}
86 
createUI()87 	private void createUI () {
88 		skin = new Skin(Gdx.files.internal("data/uiskin.json"));
89 		ui = new Stage();
90 
91 		String[] filters = new String[TextureFilter.values().length];
92 		int idx = 0;
93 		for (TextureFilter filter : TextureFilter.values()) {
94 			filters[idx++] = filter.toString();
95 		}
96 		hwMipMap = new CheckBox("Hardware Mips", skin);
97 		minFilter = new SelectBox(skin);
98 		minFilter.setItems(filters);
99 		magFilter = new SelectBox(skin.get(SelectBoxStyle.class));
100 		magFilter.setItems("Nearest", "Linear");
101 
102 		Table table = new Table();
103 		table.setSize(ui.getWidth(), 30);
104 		table.setY(ui.getHeight() - 30);
105 		table.add(hwMipMap).spaceRight(5);
106 		table.add(new Label("Min Filter", skin)).spaceRight(5);
107 		table.add(minFilter).spaceRight(5);
108 		table.add(new Label("Mag Filter", skin)).spaceRight(5);
109 		table.add(magFilter);
110 
111 		ui.addActor(table);
112 	}
113 
114 	@Override
render()115 	public void render () {
116 		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
117 		Gdx.gl.glEnable(GL20.GL_TEXTURE_2D);
118 
119 		camera.update();
120 
121 		currTexture = hwMipMap.isChecked() ? textureHW : textureSW;
122 		currTexture.bind();
123 		currTexture.setFilter(TextureFilter.valueOf(minFilter.getSelected()), TextureFilter.valueOf(magFilter.getSelected()));
124 
125 		shader.begin();
126 		shader.setUniformMatrix("u_projTrans", camera.combined);
127 		shader.setUniformi("s_texture", 0);
128 		mesh.render(shader, GL20.GL_TRIANGLE_FAN);
129 		shader.end();
130 
131 		ui.act();
132 		ui.draw();
133 	}
134 
135 	@Override
dispose()136 	public void dispose () {
137 		shader.dispose();
138 		textureHW.dispose();
139 		textureSW.dispose();
140 		mesh.dispose();
141 		ui.dispose();
142 		skin.dispose();
143 	}
144 }
145