Android 对象在堆中吗,android - 在一个glDrawElements()中绘制多个对象 - 堆栈内存溢出...

基本上,它只是绘制带有纹理的矩形。 现在,我想在一个glDrawElements()调用中在不同位置但具有相同纹理绘制多个glDrawElements() 。 因此,我将更多项目添加到vertices和indices数组。 但是,每个矩形的纹理坐标( uvs数组)都是相同的,因此没有必要通过复制相同的值来拉伸它。 我可以以某种方式重用它,或者将其设置为着色器代码中某个地方的常量吗?

顶点着色器:

uniform mat4 uMVPMatrix;

attribute vec4 vPosition;

attribute vec2 a_texCoord;

varying vec2 v_texCoord;

void main() {

gl_Position = uMVPMatrix * vPosition;

v_texCoord = a_texCoord;

}

片段着色器:

precision mediump float;

varying vec2 v_texCoord;

uniform sampler2D s_texture;

void main() {

gl_FragColor = texture2D( s_texture, v_texCoord );

}

数组(用于缓冲区):

vertices = new float[]

{ 10.0f, 200f, 0.0f,

10.0f, 100f, 0.0f,

100f, 100f, 0.0f,

100f, 200f, 0.0f,

};

indices = new short[] {0, 1, 2, 0, 2, 3};

uvs = new float[] {

0.0f, 0.0f,

0.0f, 1.0f,

1.0f, 1.0f,

1.0f, 0.0f

};

渲染代码:

private void Render() {

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

int mPositionHandle = GLES20.glGetAttribLocation(program, "vPosition");

GLES20.glEnableVertexAttribArray(mPositionHandle);

GLES20.glVertexAttribPointer(mPositionHandle, 3, GLES20.GL_FLOAT, false, 0, vertexBuffer);

int mTexCoordLoc = GLES20.glGetAttribLocation(program, "a_texCoord" );

GLES20.glEnableVertexAttribArray ( mTexCoordLoc );

GLES20.glVertexAttribPointer ( mTexCoordLoc, 2, GLES20.GL_FLOAT, false, 0, uvBuffer);

int mtrxhandle = GLES20.glGetUniformLocation(program, "uMVPMatrix");

GLES20.glUniformMatrix4fv(mtrxhandle, 1, false, m, 0);

int mSamplerLoc = GLES20.glGetUniformLocation (program, "s_texture" );

GLES20.glUniform1i ( mSamplerLoc, 0);

GLES20.glDrawElements(GLES20.GL_TRIANGLES, indices.length, GLES20.GL_UNSIGNED_SHORT, drawListBuffer);

GLES20.glDisableVertexAttribArray(mPositionHandle);

GLES20.glDisableVertexAttribArray(mTexCoordLoc);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值