Мне нужно сделать некоторые большие оптимизации в моей игре, и я думал, так как мы можем передать цвет vec4 в шейдер, упакованный только на один плавающий, есть способ передать текстуру vec2 координаты тоже? Например, в следующем коде я могу передать 2 текстурных координаты (всегда 1 и 0) только как один элемент, так же, как это происходит в цветовом элементе.OpenGL передает упакованные текстурные координаты в шейдер
public void point(float x,float y,float z,float size,float color){
float hsize=size/2;
if(index>vertices.length-7)return;
vertices[index++]=x-hsize;
vertices[index++]=y-hsize;
vertices[index++]=color;
vertices[index++]=0;
vertices[index++]=0;
vertices[index++]=x+hsize;
vertices[index++]=y-hsize;
vertices[index++]=color;
vertices[index++]=1;
vertices[index++]=0;
vertices[index++]=x+hsize;
vertices[index++]=y+hsize;
vertices[index++]=color;
vertices[index++]=1;
vertices[index++]=1;
vertices[index++]=x-hsize;
vertices[index++]=y+hsize;
vertices[index++]=color;
vertices[index++]=0;
vertices[index++]=1;
num++;
}
{
mesh=new Mesh(false,COUNT*20, indices.length,
new VertexAttribute(Usage.Position, 2,"a_position"),
new VertexAttribute(Usage.ColorPacked, 4,"a_color"),
new VertexAttribute(Usage.TextureCoordinates, 2,"a_texCoord0")
);
}
осколочная шейдер
varying vec4 v_color;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
void main() {
vec4 color=v_color * texture2D(u_texture, v_texCoords);
gl_FragColor = color;
}
верт шейдер
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;
uniform mat4 u_projTrans;
varying vec4 v_color;
varying vec2 v_texCoords;
void main() {
v_color = a_color;
v_texCoords = a_texCoord0;
gl_Position = u_projTrans * a_position;
}
Я знаю, что это не будет делать большую разницу в производительности, но я просто хочу, чтобы провести некоторые дополнительные часов здесь и там, чтобы сделать эту небольшую оптимизацию, чтобы моя игра работала быстрее.
работы !, Интересно, почему libgdx не по умолчанию используется подстройка, как это по крайней мере в SpriteBatch после текстурных координат спрайта не изменяется очень предлагает, вероятно, прирост производительности не является существенным, а его чем-то. – SteveL
В SpriteBatch есть много кода, который зависит от его конкретного размера вершины и назначений атрибутов для оптимизации. В TextureAtlases любого значительного размера низкая точность одного байта для U и V будет недостаточной. Для вас мало того, что вы не используете TextureRegions из TextureAtlas, где вам действительно не нужна точность UV. – Tenfour04
Я вижу, и я был готов возиться с источником SpriteBatch и TextureRegion, чтобы сделать это, и я полностью забыл о точности потерь. Я использую TextureAtlase во всем остальном, и выше это просто эффект свечения вокруг некоторых объектов (возможно, 400- 500 объектов, таких как частицы). Спасибо за твой собеседник. – SteveL