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 не копирует данные, не так ли?
glTexImage2D всегда делает копию данных. Если есть ошибка, то она имеет другую причину, чем местонахождение исходного буфера данных.
Других решений пока нет …