作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的简单代码中,我将 1 channel 数据加载到纹理中。我用 glTexImage2D()
与 GL_LUMINANCE
(这是一种 1 channel 格式)和 GL_UNSIGNED_BYTE
,所以每个像素应该占用一个字节。我分配了一个大小等于像素数 (2 x 2) 的缓冲区,它表示输入像素数据(像素的值对我们的目的无关紧要)。
当您在启用 Address Sanitizer 的情况下运行以下代码时,它会在对 glTexImage2D()
的调用中检测到堆缓冲区溢出。 ,说它试图读取超出堆分配缓冲区的范围:
#import <OpenGLES/ES2/gl.h>
//...
EAGLContext* context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:context];
GLsizei width = 2, height = 2;
void *data = malloc(width * height); // contents don't matter for now
glTexImage2D(GL_TEXTURE_2D,
0,
GL_LUMINANCE,
width,
height,
0,
GL_LUMINANCE,
GL_UNSIGNED_BYTE,
data);
最佳答案
感谢@genpfault 的评论,我已经解决了。
我需要将解包对齐设置为 1:
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
malloc
分配 16 个对齐的缓冲区。但是第二行和后续行与默认对齐方式 4 未对齐,除非行长度是 4 的倍数(这解释了为什么 2x2 和 3x3 不起作用,但 4x4 起作用)。 1x1 恰好可以工作,因为它没有第二行。
关于ios - glTexImage2D 读取超出缓冲区范围(iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37664944/
因为,例如,glBufferData可以报告 GL_OUT_OF_MEMORY 错误,我预计 glTexImage这样做,但事实并非如此。 大概可能会用完纹理内存,那么我该如何检测该事件? 最佳答
为什么 glTexImage1D、glTexImage2D 和 glTexImage3D 函数需要内部格式(即 GL_RGBA8、GL_R32UI 等)和像素格式? (GL_RGBA,GL_RED_I
当我使用 glTexImage2D 绑定(bind)我的图像时,它呈现得很好。 首先是片段着色器中的代码: uniform sampler2D tex; in vec2 tex_coord; // m
我是一名优秀的程序员,十分优秀!