Я сохраню это: код, указанный в конце этого сообщения, находится в верхнем порядке в моем проекте. У меня есть OGLES2. . 0 рамки в месте, которое делает все, кроме текстур прекрасно при визуализации одной текстуры все, что я вижу, это черный ящик правильных размеровOpenGL ES 2.0: текстура делает черный, несколько часов без разрешения :(
Вот что я проверить:.
Имея выводит текстуру байты (это формат
GL_ALPHA
), видно, что есть нулевые и ненулевые значения, поэтому данные выглядят правильно (или, по крайней мере, не все черные!).текстурные идентификаторами являются правильными, проверяется с помощью следующих в вершинном шейдере:
gl_FragColor=vec4(v_texCoord.xy,0.0,1.0);
..и наблюдения ожидаемогоblack->green->yellow->red
цветового потока движущегося от(0,0)->(0,1)->(1,1)->(1,0)
видно.Мое текстура имеет мощность двух измерений:
256 x 64
, правильно отраженная в массиве данных.
Я был бы чрезвычайно признателен за помощь в определении того, что случилось, так как после нескольких часов прибегая к помощи и подталкивания я тупик!
glGenTextures(1, &_textureId);
GLint savedId;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &savedId);
glBindTexture(GL_TEXTURE_2D, _textureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
GLenum datatype = -1;
GLenum format = -1;
switch([self pixelFormat]) {
case kGLTexturePixelFormat_RGBA8888:
format=GL_RGBA;
datatype=GL_UNSIGNED_BYTE;
break;
case kGLTexturePixelFormat_RGB565:
format=GL_RGB;
datatype=GL_UNSIGNED_SHORT_5_6_5;
break;
case kGLTexturePixelFormat_A8: // * This is current format, used for testing.
format=GL_ALPHA;
datatype=GL_UNSIGNED_BYTE;
break;
default:
[NSException raise:NSInternalInconsistencyException format:@""];
}
glTexImage2D(GL_TEXTURE_2D, 0, format, [self pixelsWide], [self pixelsHigh], 0, format, datatype, [self data]);
glBindTexture(GL_TEXTURE_2D, savedId);
//...
GLint s_textureId = glGetUniformLocation(program, "s_texture");
//...
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, [_textureAtlas textureId]);
glUniform1i(s_textureId, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// In vertex shader:
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
uniform sampler2D s_texture;
void main() {
// ...
v_texCoord = a_texCoord;
}
// In fragment shader:
varying vec2 v_texCoord;
uniform sampler2D s_texture;
void main() {
// ...
gl_FragColor = texture2D(s_texture, v_texCoord);
}
Спасибо вам большое, вы совершенно правы! Я модифицировал, чтобы использовать .aaaa, и теперь я вижу свой текст :-) Очень, очень благодарен, действительно, пиво. – KomodoDave
@ KomodoDave, пожалуйста, приветствуйте;) – rotoglup