我尝试初始化纹理(在opengl中)。如果传输给glTexSubImage2D的块分配了malloc,则初始化效果很好。如果我使用aligned_alloc,我大部分时间都会遇到段错误。为什么?
重现问题的最小代码:
doctrine:
orm:
metadata_cache_driver: apc
result_cache_driver: apc
query_cache_driver: apc
second_level_cache:
enabled: true
log_enabled: false
region_cache_driver: apc
Valgrind使用aligned_alloc列出了很多错误。两个(如第一个)在aligned_alloc invokation的位置上进行memalign。 glTexSubImage2D命令位置的所有其他(很多像第二个)。
GLuint texture_id;
GLenum err;
int sx = 2048;
int sy = 1024;
char *data = (char *)aligned_alloc(sizeof(char)*sx*sy*3, ALIGN_VALUE);
//char *data = (char *)malloc(sizeof(char)*sx*sy*3);
glGenTextures(1, &texture_id);
glActiveTexture(texture_unit);
glBindTexture(GL_TEXTURE_2D, texture_id);
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGB8, sx, sy);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, sx, sy, GL_BGR, GL_UNSIGNED_BYTE, data);
更改ALIGN_VALUE无效。
当我使用malloc时,Valgrind没有列出任何错误。
答案 0 :(得分:0)
我错误地在我的最小例子中使用了aligned_alloc(sizeof(char) sx sy * 3,ALIGN_VALUE)。参数错误。
改为使用: aligned_alloc(ALIGN_VALUE,sizeof(char) sx sy * 3)