glTexImage2D копирует данные или просто указывает это?

  InitTexture (  ) {
int size = 600 * 600 * 4;
float text[ 600 * 600 * 4 ];
glGenTextures ( 1, &texture_ );

glBindTexture ( GL_TEXTURE_2D, texture_ );
for ( int i = 0 ; i < size ;  ) {
text[ i ] = 0.5f;
text[ i + 1 ] = 0.0f;
text[ i + 2 ] = 0.0f;
text[ i + 3 ] = 1.0f;
i += 4;
}
glTexImage2D ( GL_TEXTURE_2D, 0, GL_RGBA, 600, 600, 0, GL_RGBA, GL_FLOAT, text
);
glBindTexture ( GL_TEXTURE_2D, 0 );
Renderable::IsGLError ( "InitTexture: GL Error occured ..... " );
}

Приложение с этой инициализацией текстуры завершается неудачно.

 int size = 600 * 600 * 4;     // global
float text[ 600 * 600 * 4 ];  // global

InitTexture (  ) {
glGenTextures ( 1, &texture_ );

glBindTexture ( GL_TEXTURE_2D, texture_ );
for ( int i = 0 ; i < size ;  ) {
text[ i ] = 0.5f;
text[ i + 1 ] = 0.0f;
text[ i + 2 ] = 0.0f;
text[ i + 3 ] = 1.0f;
i += 4;
}
glTexImage2D ( GL_TEXTURE_2D, 0, GL_RGBA, 600, 600, 0, GL_RGBA, GL_FLOAT, text
);
glBindTexture ( GL_TEXTURE_2D, 0 );
Renderable::IsGLError ( "InitTexture: GL Error occured ..... " );
}

Но когда текстовый массив является глобальным указателем, он работает как надо. Что это значит? glTexImage2D не копирует данные, не так ли?

0

Решение

glTexImage2D всегда делает копию данных. Если есть ошибка, то она имеет другую причину, чем местонахождение исходного буфера данных.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]