代码之家  ›  专栏  ›  技术社区  ›  java

从着色器到CPU端获取纹理坐标

  •  0
  • java  · 技术社区  · 8 年前

    我正在寻找一个解决方案来获取存储在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);
    

    只是猜测一下,根据调试器,数组中没有填充任何数据 但我想你得到了点-从GPU中提取纹理向量

    1 回复  |  直到 8 年前
        1
  •  1
  •   bernie    8 年前

    你在用 glVertexAttribPointer 具有 . 据我所知,这并不能提供回读数据的方法。

    但是,这种使用模式已经被弃用了很长一段时间,取而代之的是 (和 顶点数组对象 ). 大致上,使用模式是:

    • 创建一个VBO(在GPU上分配内存)
    • 用顶点数据填充VBO
    • glVertexAttribPointer 和 glEnableVertexAttribArray

    VBO允许通过 glGetBufferSubData .

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