我正在创建一个非常简单的Android游戏,它有各种精灵,使用不同的纹理地图集。纹理图集存储为不同的图像文件。使用OpenGL ES 2.0将这些不同的纹理渲染到不同的精灵的最有效方法是什么?
目前,我每次将精灵渲染到游戏画面时都会重新加载每个精灵纹理,我意识到根本没有效果。我希望能够将纹理地图一次上传到GPU,然后使用GPU内存中的缓存纹理渲染到相应的精灵顶点。
下面是我的顶点和片段着色器GLSL代码。以下是我的问题:
或
我在OpenGL ES 2.0上发现的大部分书籍都有纹理着色示例,仅包含单个纹理的着色。我在网上找到的其他例子演示了使用多个重叠纹理。我还没有找到一个关于用不同纹理着色不同顶点的有效方法的来源,所以非常感谢你给我的任何见解。
此外,如何更新GPU内存中的顶点缓冲区(即精灵在屏幕上的位置),而无需更改Java中的值,然后将它们重新写回GPU?这有什么好的GLSL功能吗?为了避免CPU核心和GPU之间出现类似的内存抖动?
提前感谢您提出的任何建议 - 我对OpenGL和GLSL都很陌生。
^ _ ^
顶点着色器:
precision highp float;
uniform mat4 u_orthMatrix;
attribute vec4 a_position;
attribute vec2 a_inputTextureCoordinate;
varying vec2 v_textureCoordinate;
void main() {
gl_Position = u_orthMatrix * a_position;
v_textureCoordinate = a_inputTextureCoordinate;
}
片段着色器:
precision mediump float;
varying vec2 v_textureCoordinate;
uniform sampler2D u_texture;
void main() {
gl_FragColor = texture2D(u_texture, v_textureCoordinate);
}