gpt4 book ai didi

android - int数组到android中的opengl纹理

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:34 25 4
gpt4 key购买 nike

我正在尝试为 android 中的相机添加一些效果,我在互联网上找到了一些东西,但在创建纹理时卡住了,

我使用函数 decodeYUV420SP() 返回一个 int[width*height] RGB 数组,每个数组位置都有十六进制值,

现在,我想创建这个数组的 openGL 纹理,但我不知道如何,我可以将每个十六进制值转换为它的 R_G_B 分隔并将其放入 opengl,但它不起作用我做这样的事情:

mNewTexture = new int[width*height*4]
for(int i=0; i<mRGB.length; i=i+4){

mNewTexture[i] = getR(mRGB[i]) ; //R
mNewTexture[i+1] = getG(mRGB[i]) ; //G
mNewTexture[i+2] = getB(mRGB[i]) ; //B
mNewTexture[i+3] = getA(mRGB[i]); //A

}

将十六进制值转换为 RGBA(从 0 到 255)

我这样做是为了将它转换为 openGL 纹理:

        gl.glBindTexture(GL10.GL_TEXTURE_2D, tex);
gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, 1024, 512, 0, GL10.GL_RGBA, GL10.GL_FLOAT, FloatBuffer.wrap(mNewTexture));
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);

然而有些东西已经磨损了,因为它不起作用......

有什么想法吗?

最佳答案

为什么要尝试将 int 数组包装为 FloatBuffer?大多数转化都是不必要的。

只需获取原始纹理,将其包装在字节缓冲区中,然后将其传递给类型为 GL_UNSIGNED_BYTE 的 glTexImage。无需根据已有的数组创建新数组。

gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, 1024, 512, 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ByteBuffer.wrap(mRGB));

关于android - int数组到android中的opengl纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7754985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com