首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于glPixelStorei()对齐的问题

关于glPixelStorei()对齐的问题
EN

Stack Overflow用户
提问于 2015-09-02 19:14:33
回答 1查看 717关注 0票数 0

这个数组中的每两个值代表16个像素。(每个元素8个二进制值)

代码语言:javascript
运行
复制
GLubyte character[24] = {
    0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
    0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
    0xff, 0xc0, 0xff, 0xc0
};

这是我的代码来渲染我的位图。

代码语言:javascript
运行
复制
void init(){
    glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
}

void render(){
    glBitmap(8, 12, 0.0, 11.0, 0.0, 0.0, character);
}

但是当我更改glBitmap(8等)时对于glBitmap(10等)来说,它不起作用。

为了成功,我需要改变,

代码语言:javascript
运行
复制
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);

代码语言:javascript
运行
复制
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

我的问题是,我不知道为什么.

我只知道

代码语言:javascript
运行
复制
GL_UNPACK_ALIGNMENT, 1

告诉OpenGL只转到下一个地址而不对齐。

我不认为将ALGINMENT设置为1与我的位图长度之间有任何关系。

有人能解释一下发生了什么事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-03 04:12:50

回到一些历史规范文档(glBitmap()是一个非常的过时调用)之后,位图的对齐规则是( OpenGL 2.1规范的第136页):

代码语言:javascript
运行
复制
k = a * ceiling(w / (8 * a))

其中:

  • w是宽度,假设没有设置GL_UNPACK_ROW_LENGTH
  • aGL_UNPACK_ALIGNMENT的值。
  • k是每行使用的字节数。请注意,无论参数是如何设置的,每行总是至少在一个字节边界上开始。

将示例中的值替换为w = 8,我们得到:

  • 1字节/行,GL_UNPACK_ALIGNMENT为1。
  • 2字节/行,GL_UNPACK_ALIGNMENT为2。

对于w = 10,我们得到:

  • 每行2字节,GL_UNPACK_ALIGNMENT为1。
  • 2字节/行,GL_UNPACK_ALIGNMENT为2。

基于此,除非还设置了其他GL_UNPACK_*参数,否则无论GL_UNPACK_ALIGNMENT是1还是2,都应该获得相同的宽度10输出。如果不是这样的话,这看起来就像是OpenGL实现中的一个bug。

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

https://stackoverflow.com/questions/32361344

复制
相关文章

相似问题

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