Libgdx - How to draw some pixel

I am trying to change the pixmap and render it, but the changed pixels do not appear on the screen. I'm not sure Pixmap is the best way to do this. Can someone explain to me where my errors are in the code below? thank

package com.me.mygdxgame;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.Array;

public class MyGdxGame implements ApplicationListener {

    private OrthographicCamera camera;
    private SpriteBatch batch;
    private Pixmap _pixmap;
    private int _width;
    private int _height;
    private Texture  _pixmapTexture;
    private Sprite _pixmapSprite;
    private int _x = 0;
    private int _y = 0;

    @Override
    public void create() {      
        float w = Gdx.graphics.getWidth();
        float h = Gdx.graphics.getHeight();

        camera = new OrthographicCamera(1, h/w);
        batch = new SpriteBatch();

        _width = (int)Math.round(w);
        _height = (int)Math.round(h);
        _pixmap = new Pixmap( _width, _height, Format.RGBA8888 );
        _pixmap.setColor(Color.RED);
        _pixmap.fillRectangle(0, 0, _width, _height);
        _pixmapTexture = new Texture(_pixmap, Format.RGB888, false);
    }

    @Override
    public void dispose() {
        batch.dispose();
        _pixmap.dispose();
        _pixmapTexture.dispose();
    }

    @Override
    public void render() {  
        updatePixMap();

        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        batch.draw(_pixmapTexture, -_width/2, -_height/2);
        batch.end();
    }

    private void updatePixMap() {
        _x += 1;
        if (_x >= _width) {
            _x = 0;
        }

        _y += 1;
        if (_y >= _height / 2) {
            return;
        }

        _pixmap = new Pixmap( _width, _height, Format.RGBA8888 );
        _pixmap.setColor(Color.CYAN);
        _pixmap.drawPixel(_x, _y);
        _pixmapTexture = new Texture(_pixmap, Format.RGB888, false);
    }

    @Override
    public void resize(int width, int height) {
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }
}
+5
source share
1 answer

You create a new pixmap every cycle, and you do not draw the full texture in your view.

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;

public class MyGdxGame implements ApplicationListener {

    private OrthographicCamera  camera;
    private SpriteBatch         batch;
    private Pixmap              _pixmap;
    private Texture             _pixmapTexture;
    private int                 _x  = 0;
    private int                 _y  = 0;
    private float               _w;
    private float               _h;
    private int                 _width;
    private int                 _height;

    @Override
    public void create() {
        _w = Gdx.graphics.getWidth();
        _h = Gdx.graphics.getHeight();
        _width = MathUtils.round(_w);
        _height = MathUtils.round(_h);

        camera = new OrthographicCamera(1f, _h / _w);
        camera.setToOrtho(false);
        batch = new SpriteBatch();

        _pixmap = new Pixmap(_width, _height, Format.RGBA8888);
        _pixmap.setColor(Color.RED);
        _pixmap.fillRectangle(0, 0, _width, _height);
        _pixmapTexture = new Texture(_pixmap, Format.RGB888, false);
    }

    @Override
    public void dispose() {
        batch.dispose();
        _pixmap.dispose();
        _pixmapTexture.dispose();
    }

    @Override
    public void pause() {
    }

    @Override
    public void render() {
        updatePixMap();

        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        batch.setProjectionMatrix(camera.combined);

        batch.begin();
        batch.draw(_pixmapTexture, 1f / 2f, _h / _w / 2f);
        batch.end();
    }

    @Override
    public void resize(final int width, final int height) {
    }

    @Override
    public void resume() {
    }

    private void updatePixMap() {
        _x += 1;
        if (_x >= _width) _x = 0;

        _y += 1;
        if (_y >= _height / 2) return;

        _pixmap.setColor(Color.CYAN);
        _pixmap.drawPixel(_x, _y);
        _pixmapTexture = new Texture(_pixmap, Format.RGB888, false);
    }
}

But it is very slow, so why do you want to do this?

+3
source

All Articles