【问题标题】:Get texturecoordinates from shader to CPU-side从着色器获取纹理坐标到 CPU 端
【发布时间】:2018-11-20 13:32:03
【问题描述】:

我正在寻找一种解决方案来获取存储在 GPU 端的纹理坐标。

即属性 (in) - 传入着色器的纹理坐标 通过浮动缓冲区

  mCubeTextureCoordinates.position(0);
  GLES20.glVertexAttribPointer(mTextureCoordinateHandle, GLfields.TEXTURE_COORD_DATASIZE, GLES20.GL_FLOAT, false,
            0, mCubeTextureCoordinates);

在 glsl 程序中

attribute vec2 a_TexCoordinate;

我可以在某个阶段获取 cpu 端的 vec2 数据吗,例如 ..

int textAttr = GLES20.glGetAttribLocation(mProgramHandle, "a_TexCoordinate");

GLES20.glGetFloatv(textAttr, xy, 0);

其中 xy 是一个浮点向量 (float[] xy = new ...)

只是猜测,根据调试器,数组没有填充任何数据 但我想你明白了 - 从 GPU 获取纹理坐标向量

【问题讨论】:

    标签: android glsl textures opengl-es-2.0


    【解决方案1】:

    您正在将glVertexAttribPointer客户端顶点数组一起使用。据我所知,这并没有提供回读数据的方法。

    然而,这种使用模式已经被弃用了很长时间,取而代之的是顶点缓冲区对象(和顶点数组对象)。大致的使用模式是:

    • 创建一个 VBO(这会在 GPU 上分配内存)
    • 用顶点数据填充 VBO
    • 使用glVertexAttribPointerglEnableVertexAttribArray 将VBO 数据绑定到顶点属性

    VBO 允许通过glGetBufferSubData 读取其内容。

    查看这些其他问题以了解更多信息:

    另外,getFloatv and friends 用于获取 OpenGL 参数值(如当前混合模式),而不是顶点属性值。

    【讨论】:

    • 感谢我之前使用过 VBO - 经过较长时间的休息后才回到 OpenGL - 我会对此进行调查,然后可能会接受答案。谢谢!!!
    猜你喜欢
    • 2016-01-10
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多