LINUX.ORG.RU

Как в libdgx получить последнюю ошибку шейдера?

 , , ,


0

1

Не нашел актуального примера, как на libgdx вывести треугольник в 3d, но, вроде бы, больше ошибок не нашел. Однако при запуске валится с NullPointerException при попытке скомпилить вершинный шейдер и дальше glCreateShader отладчик не идет. Можно как-то получить последнее сообщение об ошибке аналогично GLgetProgramiv в C? Шейдеры:

uniform mat4 combined;
attribute vec4 pos1;
void main()
{
  gl_Position = pos1 * combined;
}
 void main()
 {
  gl_FragColor = vec4(1.0,0.0,0.0,1.0); 
 }
Сам код(переделал из дефолтного проекта):
package com.syjgin.spacecheckers;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.graphics.Mesh;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
import com.badlogic.gdx.graphics.VertexAttribute;

public class Spacecheckers implements ApplicationListener {
  private PerspectiveCamera camera;
  private Texture texture;
  private Mesh sphere;
  private ShaderProgram ourCheckers;
  @Override
  public void create() {    
    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();
    float fov = 0.45f;
    Vector3 pos = new Vector3(0.0f,2.0f,-2.0f);
    camera = new PerspectiveCamera(fov,w,h);
    camera.lookAt(0, 0, 0);
    camera.translate(pos);
    ourCheckers = new ShaderProgram(Gdx.files.internal("data/vertex.glsl"),Gdx.files.internal("data/fragment.glsl"));
    sphere = new Mesh(true,3,3,VertexAttribute.Position());
    sphere.setVertices(new float[]
        {-0.5f, -0.5f, 0.0f,
        0.5f, -0.5f, 0.0f,
        0.5f, 0.5f, 0.0f});
    sphere.setIndices(new short[] {0, 1, 2});
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
  }

  @Override
  public void dispose() {
    ourCheckers.dispose();
    sphere.dispose();
    texture.dispose();
  }

  @Override
  public void render() {    
    ourCheckers.begin();
    ourCheckers.setUniformMatrix("combined", camera.combined);
    sphere.render(ourCheckers, GL20.GL_TRIANGLES);
    ourCheckers.end();
    
  }

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

  @Override
  public void pause() {
  }

  @Override
  public void resume() {
  }
}

★★★★

Оказалось, я в настройках lwjgl проекта забыл убрать useGL20 = false;

Теперь вторая стандартная проблема Hello world на всем, использующем openGL - с какого-то ничего не отображается, хотя near и far planes для камеры переопределил.

wingear ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.