首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >着色存储缓冲对象: endianness?

着色存储缓冲对象: endianness?
EN

Stack Overflow用户
提问于 2018-03-28 14:50:59
回答 1查看 664关注 0票数 1

OpenGL ES 3.1,安卓。

我已经设置了SSBO,目的是在片段着色器中编写一些东西,并在应用程序中读取它。事情几乎可以工作,也就是我可以把我写的值读回来,只有一个问题:当我读取一个INT时,它的字节会反转(在着色器中写的'17‘= 0x00000011返回为'285212672’= 0x11000000 )。

我是这样做的:

着色器

代码语言:javascript
复制
(...)
layout (std140,binding=0) buffer SSBO
  {
  int ssbocount[];
  };
(...)
ssbocount[0] = 17;   
(...)

应用程序代码

代码语言:javascript
复制
int SIZE = 40;
int[] mSSBO = new int[1];
ByteBuffer buf = ByteBuffer.allocateDirect(SIZE).order(ByteOrder.nativeOrder());
(...)
glGenBuffers(1,mSSBO,0);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, mSSBO[0]);
glBufferData(GL_SHADER_STORAGE_BUFFER, SIZE, null, GL_DYNAMIC_READ);
buf = (ByteBuffer) glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, SIZE, GL_MAP_READ_BIT );
glBindBufferBase(GL_SHADER_STORAGE_BUFFER,0, mSSBO[0]);
(...)
int readValue = buf.getInt(0);

现在,打印出这个值,它以'17‘的形式出现,并带有相反的字节。

注意,我确实用'nativeOrder‘分配了ByteBuffer。当然,我可以手动翻转字节,但需要注意的是,这只会在某些时候起作用,这取决于主机的功能.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 09:38:11

修复方法是使用本机endianess,并使用ByteBuffer使用ByteBuffer.asIntBuffer()创建一个整数视图。由于某些原因,本地getInt()调用似乎不尊重本地ByteBuffer endianness设置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49537730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档