/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* 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.badlogic.gdx.tests;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.FileTextureData;
import com.badlogic.gdx.tests.utils.GdxTest;
/**
* This tests is used to illustrate how backing the Pixmap in GWT with a Canvas can cause problems.
* @author barkholt
*
*/
public class GWTLossyPremultipliedAlphaTest extends GdxTest {
private SpriteBatch batch;
private Texture goodTexture;
private Texture badTexture;
public void create () {
batch = new SpriteBatch();
// Load a texture with premultiplied alpha
FileTextureData data = new FileTextureData(Gdx.files.internal("data/premultiplied_alpha_test.png"), null, null, false);
goodTexture = new Texture(data);
// Load the texture again. But this time, force the GWT implementation of Pixmap to move to a Canvas representation of the image
Pixmap pixmap = new Pixmap(Gdx.files.internal("data/premultiplied_alpha_test.png"));
pixmap.getPixel(0, 0);
FileTextureData data1 = new FileTextureData(null, pixmap, null, false);
badTexture = new Texture(data1);
}
public void render () {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ONE_MINUS_SRC_ALPHA);
batch.draw(badTexture,
0,
Gdx.graphics.getHeight(),
Gdx.graphics.getWidth() * 0.5f,
-Gdx.graphics.getHeight());
batch.draw(goodTexture,
Gdx.graphics.getWidth() * 0.5f,
Gdx.graphics.getHeight(),
Gdx.graphics.getWidth() * 0.5f,
-Gdx.graphics.getHeight());
batch.end();
}
public boolean needsGL20 () {
return false;
}
}