aligned_alloc和glTexSubImage2D导致分段错误

时间:2016-10-11 15:53:17

标签: opengl-4

我尝试初始化纹理(在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没有列出任何错误。

1 个答案:

答案 0 :(得分:0)

我错误地在我的最小例子中使用了aligned_alloc(sizeof(char) sx sy * 3,ALIGN_VALUE)。参数错误。

改为使用:     aligned_alloc(ALIGN_VALUE,sizeof(char) sx sy * 3)