Мне нужно добавить два новых режима содержимого для отображения моих текстур с помощью OpenGL ES 2.0: «Aspect Fit» и «Aspect Fill».
Вот изображение, поясняющее различные режимы содержимого:
введите описание изображения здесь
У меня уже есть режим содержимого «Масштабирование для заполнения», я думаю, это поведение по умолчанию.
Вот мой базовый c код вершинного шейдера для текстур:
precision highp float;
attribute vec2 aTexCoordinate;
varying vec2 vTexCoordinate;
uniform mat4 uMVPMatrix;
attribute vec4 vPosition;
void main() {
vTexCoordinate = aTexCoordinate;
gl_Position = uMVPMatrix * vPosition;
}
А вот мой фрагментный шейдер для текстур:
precision mediump float;
uniform vec4 vColor;
uniform sampler2D uTexture;
varying vec2 vTexCoordinate;
void main() {
// premultiplied alpha
vec4 texColor = texture2D(uTexture, vTexCoordinate);
// Scale the texture RGB by the vertex color
texColor.rgb *= vColor.rgb;
// Scale the texture RGBA by the vertex alpha to reinstate premultiplication
gl_FragColor = texColor * vColor.a;
//gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
Для режима «Aspect Fill» я подумал, что могу поиграть с координатами текстуры, чтобы обрезать изображение. Но для режима «Aspect Fit» у меня нет четкого представления о том, как я могу это сделать в шейдерах, а еще лучше с красным цветом фона, как на скриншоте.