Advertisement
kajacx

LibGdx texture blend test

Jul 4th, 2014
656
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.43 KB | None | 0 0
  1. package com.neet.blockbunny;
  2.  
  3. import com.badlogic.gdx.ApplicationAdapter;
  4. import com.badlogic.gdx.Gdx;
  5. import com.badlogic.gdx.graphics.Color;
  6. import com.badlogic.gdx.graphics.GL20;
  7. import com.badlogic.gdx.graphics.OrthographicCamera;
  8. import com.badlogic.gdx.graphics.Pixmap.Format;
  9. import com.badlogic.gdx.graphics.Texture;
  10. import com.badlogic.gdx.graphics.Texture.TextureFilter;
  11. import com.badlogic.gdx.graphics.g2d.SpriteBatch;
  12. import com.badlogic.gdx.graphics.glutils.FrameBuffer;
  13. import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
  14. import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
  15.  
  16. public class Test2 extends ApplicationAdapter {
  17.  
  18.     private static final int width0 = 128, height0 = 128;
  19.     private static final int width1 = 64, height1 = 64;
  20.  
  21.     private OrthographicCamera cam0;
  22.     private ShapeRenderer renderer0;
  23.     private SpriteBatch batch0;
  24.  
  25.     private FrameBuffer buffer1;
  26.     private Texture original;
  27.     private OrthographicCamera cam1;
  28.     private ShapeRenderer renderer1;
  29.     private SpriteBatch batch1;
  30.  
  31.     private FrameBuffer buffer2;
  32.     private Texture mask;
  33.     private OrthographicCamera cam2;
  34.     private ShapeRenderer renderer2;
  35.     private SpriteBatch batch2;
  36.  
  37.     private FrameBuffer buffer3;
  38.     private Texture texture3;
  39.     private OrthographicCamera cam3;
  40.     private ShapeRenderer renderer3;
  41.     private SpriteBatch batch3;
  42.  
  43.     private Color odd = new Color(.1f, 0, 0, 1);
  44.     private Color even = new Color(0, .1f, 0, 1);
  45.  
  46.     @Override
  47.     public void create() {
  48.         // basic
  49.         cam0 = new OrthographicCamera();
  50.         cam0.setToOrtho(false, width0, height0);
  51.         cam0.update();
  52.  
  53.         batch0 = new SpriteBatch();
  54.         batch0.setProjectionMatrix(cam0.combined);
  55.  
  56.         renderer0 = new ShapeRenderer();
  57.         renderer0.setProjectionMatrix(cam0.combined);
  58.  
  59.         // for texture
  60.         cam1 = new OrthographicCamera();
  61.         cam1.setToOrtho(true, width1, height1);
  62.         cam1.update();
  63.  
  64.         batch1 = new SpriteBatch();
  65.         batch1.setProjectionMatrix(cam1.combined);
  66.  
  67.         renderer1 = new ShapeRenderer();
  68.         renderer1.setProjectionMatrix(cam1.combined);
  69.  
  70.         buffer1 = new FrameBuffer(Format.RGBA8888, width1, height1, false);
  71.         original = buffer1.getColorBufferTexture();
  72.         original.setFilter(TextureFilter.Nearest, TextureFilter.Nearest);
  73.  
  74.         // for mask
  75.         cam2 = new OrthographicCamera();
  76.         cam2.setToOrtho(true, width1, height1);
  77.         cam2.update();
  78.  
  79.         batch2 = new SpriteBatch();
  80.         batch2.setProjectionMatrix(cam2.combined);
  81.  
  82.         renderer2 = new ShapeRenderer();
  83.         renderer2.setProjectionMatrix(cam2.combined);
  84.  
  85.         buffer2 = new FrameBuffer(Format.RGBA8888, width1, height1, false);
  86.         mask = buffer2.getColorBufferTexture();
  87.         mask.setFilter(TextureFilter.Nearest, TextureFilter.Nearest);
  88.  
  89.         // for result
  90.         cam3 = new OrthographicCamera();
  91.         cam3.setToOrtho(true, width1, height1);
  92.         cam3.update();
  93.  
  94.         batch3 = new SpriteBatch();
  95.         batch3.setProjectionMatrix(cam3.combined);
  96.  
  97.         renderer3 = new ShapeRenderer();
  98.         renderer3.setProjectionMatrix(cam3.combined);
  99.  
  100.         buffer3 = new FrameBuffer(Format.RGBA8888, width1, height1, false);
  101.         texture3 = buffer3.getColorBufferTexture();
  102.         texture3.setFilter(TextureFilter.Nearest, TextureFilter.Nearest);
  103.  
  104.         // now paint texture
  105.         buffer1.begin();
  106.  
  107.         Texture full = new Texture(Gdx.files.internal("ast.png"));
  108.         batch1.begin();
  109.         batch1.draw(full, 0, 0);
  110.         batch1.end();
  111.  
  112.         buffer1.end();
  113.  
  114.         // now paint mask
  115.         buffer2.begin();
  116.  
  117.         renderer2.begin(ShapeType.Filled);
  118.         renderer2.setColor(Color.WHITE);
  119.         renderer2.rect(width1 / 4, height1 / 4, width1 / 2, height1 / 2);
  120.         renderer2.end();
  121.  
  122.         buffer2.end();
  123.  
  124.         // now paint result
  125.         buffer3.begin();
  126.  
  127.         // Gdx.gl20.glBlendFunc(GL20.GL_ZERO, GL20.GL_ZERO);
  128.         batch3.begin();
  129.         batch3.enableBlending();
  130.         batch3.draw(original, 0, 0);
  131.         batch3.draw(mask, 0, 0);
  132.         batch3.end();
  133.  
  134.         buffer3.end();
  135.  
  136.     }
  137.  
  138.     @Override
  139.     public void render() {
  140.         Gdx.gl.glClearColor(0f, 0f, 0f, 1);
  141.         Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
  142.  
  143.         // background
  144.         // i = x
  145.         renderer0.begin(ShapeType.Filled);
  146.         for (int i = 0; i < width0; i++) {
  147.             for (int j = 0; j < height0; j++) {
  148.                 boolean f = ((i + j) & 1) == 1;
  149.                 renderer0.setColor(f ? odd : even);
  150.                 renderer0.rect(i, j, 1, 1);
  151.             }
  152.         }
  153.         renderer0.end();
  154.  
  155.         batch0.enableBlending();
  156.         batch0.begin();
  157.  
  158.         batch0.draw(original, 0, 0); // to see the original
  159.         batch0.draw(mask, width1, 0); // and the mask
  160.  
  161.         batch0.draw(original, 0, height1); // base for the result
  162.  
  163.         batch0.setBlendFunction(GL20.GL_ZERO, GL20.GL_SRC_ALPHA);
  164.         batch0.draw(mask, 0, height1); // draw mask on result
  165.         batch0.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
  166.  
  167.         batch0.end();
  168.  
  169.     }
  170.  
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement